perl 6

2016-05-04 10 views
6

का उपयोग करके डीएनए न्यूक्लियोटाइड की गणना करना अच्छा दोपहर, मैं perl6.i का उपयोग करते हुए डीएनए अनुक्रम में अक्षरों की संख्या सी गणना करने की कोशिश कर रहा हूं। मैंने अन्य तरीकों की कोशिश की है, मैं केवल इसे किसी अन्य तरीके से करने की कोशिश कर रहा हूं। यहाँ कोड के कुछ मैंperl 6

use v6; 

my $default-input = "AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC"; 

sub MAIN(Str $input = $default-input) 
{ 
    say "{bag($input.comb)<A C G T>}"; 
} 



use v6; 

my $default-input = "AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC"; 

sub MAIN($input = $default-input) 
{ 
    "{<A C G T>.map({ +$input.comb(/$_/) })}".say; 

नमूना डेटासेट
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC

+0

क्या समस्या है या सवाल? –

+0

मेरा प्रश्न है कि अलग-अलग अक्षरों को गिनने के समान परिणाम प्राप्त करने के लिए मेरे लिए एक और तरीका है, मैंने कोड को चिपकाया है – Oluwole

उत्तर

7
multi sub MAIN (\DNA) { 
    my Int %bag = A => 0, C => 0, G => 0, T => 0; 

    # doesn't keep the whole thing in memory 
    # like .comb.Bag would have 
    for DNA.comb { 
    %bag{$_}++ 
    } 
    .say for %bag<A C G T> :p; 
} 

multi sub MAIN ('example'){ 
    samewith "AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC" 
} 

multi sub MAIN (Bool :STDIN($)!){ 
    samewith $*IN 
} 

multi sub MAIN (Str :filename(:$file)! where .IO.f){ 
    samewith $file.IO 
} 
~$ ./test.p6 
Usage: 
    ./test.p6 <DNA> 
    ./test.p6 example 
    ./test.p6 --STDIN 
    ./test.p6 --filename|--file=<Str> 

~$ ./test.p6 example 
A => 20 
C => 12 
G => 17 
T => 21 

~$ ./test.p6 --STDIN < test.in 
A => 20 
C => 12 
G => 17 
T => 21 

~$ ./test.p6 --file=test.in 
A => 20 
C => 12 
G => 17 
T => 21 
+2

मैंने एक [पुल अनुरोध] सबमिट किया है (https://github.com/perl6/doc/pull/509) इसके उपयोग के आधार पर 'उसी के साथ' के कुछ न्यूनतम दस्तावेज के लिए। एक और शांत पर्ल 6 सुविधा जो मैंने पहले नहीं देखी थी। धन्यवाद! –

+0

आप हस्ताक्षर 'बहु उप मेन (स्ट्र: इनपुट (: $ एफ) में त्रुटि हैंडलिंग और डिफ़ॉल्ट फ़ाइल नाम भी जोड़ सकते हैं जहां {I.O.f // die" फ़ाइल $ * CWD "} = 'dolly में नहीं मिली है .txt ') ' –

3

एक और तरीका है BioInfo modules I'm working on जो आप के लिए पहले से ही बैग करने के लिए एक बलात्कार है उपयोग करने के लिए है के साथ आया हैं :)

use v6; 
use BioInfo; 

my @sequences = ` 
>seqid 
AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC 
`; 

for @sequences -> $seq { 
    say $seq.Bag; 
} 

उपर्युक्त कोड में आप एक विशेष बायोइनफॉरमैटिक्स स्लैंग आयात कर रहे हैं जो समझता है कि `` फास्टा अक्षर के बीच स्ट्रिंग अक्षर हैं। डीएनए/आरएनए/एमिनो-एसिड स्वचालित रूप से पहचाने जाते हैं और इसके लिए आपको एक विशिष्ट कक्षा मिलती है। ऑब्जेक्ट का अपना है .बैग जो आप चाहते हैं वह करता है। मेरे अपने मॉड्यूल के अलावा बायोपेर 6 परियोजना भी है।

आप फ़ाइल से पढ़ने का फिर निम्न आप के लिए काम करना चाहिए चाहते हैं:

use v6; 
use BioInfo::Parser::FASTA; 
use BioInfo::IO::FileParser; 

#Spawn an IO thread that parses the file and creates BioInfo::Seq objects on .get 
my $seq_file = BioInfo::IO::FileParser.new(file => 'myseqs.fa', parser => BioInfo::Parser::FASTA); 

#Print the residue counts per file 
while my $seq = $seq_file.get() { 
    say $seq.Bag; 
} 
+1

बहुत बहुत धन्यवाद। मैं कोशिश करूँगा – Oluwole