【发布时间】:2013-08-12 15:52:26
【问题描述】:
应该使用哪种算法将 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 中有字母,所以我无法添加长度整数收到错误消息。
是的,有什么建议吗?
【问题讨论】:
标签: ruby sorting bioinformatics sequences fasta