2

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文字が含まれているため、エラーメッセージを表示せずに長さの整数を追加することはできません。

ええ、何か提案はありますか?

4

1 に答える 1