【问题标题】:Rearrange sequences in FASTA format file by length?按长度重新排列 FASTA 格式文件中的序列?
【发布时间】: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


    【解决方案1】:

    我认为你可以使用“how to sort a ruby array of strings by length”。

    使用链接中描述的 lambda 将数组映射到新数组。

    像这样:

    require 'rubygems'
    require 'bio'
    
    file = Bio::FastaFormat.open(ARGV.shift)
    seqarray = []
    file.each do |seq|
        seqarray.push seq
    end
    
    puts seqarray.sort_by {|x| x.length}
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    相关资源
    最近更新 更多