1

以前の問題で助けてくれてありがとう。

最後に取り組んでいた作業、具体的には ORF (オープンリーディングフレーム) ファインダープログラムをほぼ完成させました。これまでのところ、@AminoAcidArray1 という配列があります。開始コドンはすべて「_」、停止コドンはすべて「X」です。

ORF のカウント方法を教えてください。別の言い方をすれば、「_」の後に「X」がランダムに無視できる文字を挟んでいる場合、配列内の時間をカウントするにはどうすればよいですか? どのような種類のループを使用する必要がありますか? ~= が必要だと思います

はい、bioPerl でこれを簡単に実行できることは知っていますが、何らかの理由で activePerl しか利用できません。

心からの感謝、Shtanto

4

3 に答える 3

2

まず、最新の ActivePerl には 、メインの「Activeperl」リポジトリにBundle::BioPerlがあります。これにより、一部の ActivePerl バージョンでBioPerl をインストールできるようになります。

それで、

print  "$-[0]..$+[0]\n" while $orf =~ /_[^X]*X/g;

$orf に含まれる orfs が連続している (ネストされていない) 場合、その orfs の開始 (_) および終了 (X) インデックスを出力します。入れ子になっている場合は、もう少し複雑な式 (再帰を使用) を使用する必要があります。

ところで:式は何をしますか

print join ',', @AminoAcidArray1;

コンソールに印刷しますか?

rbo

于 2012-05-13T22:07:13.153 に答える
1

あなたのコメントからそれを正しく理解している場合:

=~配列があり、演算子は必要ありません。

配列を一度トラバースし、「読み取りウィンドウ」と呼ばれるものの現在の状態を覚えておく必要があります。言う:

my $state = 0;
my $count = 0;
for my $item (@array) {
 if ($item eq "_") {
    if ($state==0) {
       $state=1;
    }
 } elsif ($item eq "X") {
     if ($state==1) {
       $state=0;
       $count++;
    }
 }
}

return $count;
于 2012-05-13T22:07:24.043 に答える
0

あなたの質問はあなたのドメインにあまりにも具体的ですが、私が理解しているのは、配列内のいくつかの出現をカウントしたいということです、これは私が次のコードで行うことです(私は使用しますperlconsole):

Perl> my @a = qw/az ae ar at ay au pr lf/
8

Perl> my $count = grep /^a/, @a
6

Perl> print "$count\n"
6
1

Perl> 
于 2012-05-13T21:04:26.290 に答える