FASTA シーケンスを長さの順序 (短い順) に並べ替えるには、どのようなアルゴリズムを使用する必要がありますか? シーケンスを長さ順にソートする必要がありますが、長さだけでなくすべての情報が表示されます。
を使用してシーケンスの「長さ」をソートし、Bio::FastaFormat#length
長さを配列に入れてからソートできます。
require 'rubygems'
require 'bio'
file = Bio::FastaFormat.open(ARGV.shift)
seqarray = []
file.each do |seq|
a = seq.length
seqarray.push a
end
puts seqarray.sort
これはシーケンスの長さを順番に表示しますが、私が確認できるようにする必要があるのは、元の FASTA 形式の長さ順です。
seq.length
(各シーケンスの長さ)をseq.entry
(fastaフォーマット全体)に追加してからソートすることはできません。これseq.length
は、整数でありseq.entry
、文字列を与えるためです。を変換しseq.length.to_s
て、これを に追加してseq.entry
、ソートしてみました。これは私が持っている最も近いものですが、残念ながら長さは文字列になっているため、1,11,111
代わりに1,2,3
順序付けられます。
require 'rubygems'
require 'bio'
file = Bio::FastaFormat.open(ARGV.shift)
seqarray = []
file.each do |seq|
a = (seq.length).to_s + ' = length' + seq.entry
seqarray.push a
end
puts seqarray.sort
sequence_id
これを行った後、エントリ全体の代わりに を使用して、長さを文字列に変換せずに上記を試しましたが、id
文字が含まれているため、エラーメッセージを表示せずに長さの整数を追加することはできません。
ええ、何か提案はありますか?