.fasta形式のDNA配列データの配列を操作するのに問題があります。私が特にやりたいのは、数千のシーケンスを持ち、ファイル内の各シーケンスのシーケンスデータをファイル内の1行に隣接させるファイルを取得することです。[Fasta形式はそのようなものです:シーケンスIDは>で始まり、その後にその行のすべてが説明になります。次の行には、このIDに対応するシーケンスがあります。そして、これは、ファイル内の次のシーケンスのIDである>で始まる次の行まで無期限に続く可能性があります]したがって、私の特定のファイルでは、ほとんどのシーケンスが複数の行にあるので、基本的にやりたいことです改行を削除しますが、シーケンスデータとシーケンスID行(>で始まる)の間ではなく、シーケンスデータ間の新しい行のみを削除します。
これを行うのは、各シーケンスのシーケンス長を取得し(長さを通じて、最も簡単な方法だと思います)、ファイル全体のすべてのシーケンスの平均シーケンス長を取得できるようにするためです。
これまでの私のスクリプトは、機能したくないようです。
#!/usr/bin/perl -w
##Subroutine
sub get_file_data1 {
my($filename) = $_[0];
my @filedata = ();
unless( open(GET_FILE_DATA, $filename)) {
print STDERR "Cannot open file \"$filename\"\n\n";
exit;
}
@filedata = <GET_FILE_DATA>;
close GET_FILE_DATA;
return @filedata;
}
##Opening files
my $fsafile = $ARGV[0];
my @filedata = &get_file_data1($fsafile);
##Procedure
my @count;
my @ids;
my $seq;
foreach $seq (@filedata){
if ($seq =~ /^>/) {push @ids, $seq;
push @count, "\n";
}
else {push @count, $seq;
}
}
foreach my $line (@count) {
if ($line =~ /^[AGTCagtc]/){
$line =~ s/^([AGTCagtc]*)\n/$1/;
}
}
##Make a text file to have a look
open FILE3, "> unbrokenseq.txt" or die "Cannot open output.txt: $!";
foreach (@count)
{
print FILE3 "$_\n"; # Print each entry in our array to the file
}
close FILE3;
__END__
##Creating array of lengths
my $number;
my @numberarray;
foreach $number (@count) {
push @numberarray, length($number);
}
print @numberarray;
__END__
use List::Util qw(sum);
sub mean {
return sum(@numberarray)/@numberarray;
}
手順セクションの2番目のforeach行に問題があり、それが何であるか理解できないようです。END行の後のコードは、プロシージャステップでコードを取得できず、必要な処理を実行できないため、まだ試していません。壊れていないシーケンスの要素を含む素敵な配列を取得する方法はありますか(新しい配列からシーケンスID行を削除することを選択しました..)?その後、長さの配列を取得できたら、平均化できますか?
最後に、残念ながら、Bio :: Perlをコンピューターで動作させることができないことを認める必要があります。何時間も試しましたが、エラーを修正するスキルがありません。私のBio::perlの問題についてうまくいけば助けてくれる人と話をします。しかし、今のところ、私はそれなしで押す必要があります。
ありがとう!この投稿の長さについて申し訳ありませんが、私は助けに感謝します。
アンドリュー