如何为每次迭代打印搜索序列的第一个结果?

时间:2017-07-29 11:01:40

标签: database perl bioinformatics bioperl

如何打印第一次出现的蛋白质序列?对于这个查询,我得到四个结果,我只想要第一个。

use Bio::DB::GenBank;
use Bio::DB::Query::GenBank;

$query     = "LEGK";
$query_obj = Bio::DB::Query::GenBank->new(
    -db    => 'protein',
    -query => $query
);

$gb_obj = Bio::DB::GenBank->new;

$stream_obj = $gb_obj->get_Stream_by_query( $query_obj );

while ( $seq_obj = $stream_obj->next_seq ) {

    # do something with the sequence object
    print
        ">$query", ' ',
        $seq_obj->display_id, ' ',
        $seq_obj->desc, "\n",
        $seq_obj->seq[, '\n';

while循环应该如下所示

while ( $seq_obj = $stream_obj->next_seq ) {

    # do something with the sequence object
    print $seq_obj->display_id, "\t", $seq_obj->length, "\n";
}

1 个答案:

答案 0 :(得分:1)

我看到你的代码片段的主要问题是它无法编译。 将$seq_obj->seq[,'\n'放在所有perl程序的开头。 这将提醒您语法错误。

我对生物学知之甚少,但是,你正在迭代序列对象,然后用()进行一个相当奇怪的调用

首先,要调用函数,请使用[],而不是[]seq表示对数组的引用。其次,'\n'似乎用于设置或获取序列值,我不知道while ($seq_obj = $stream_obj->next_seq) { print join(' ', $seq_obj->display_id, $seq_obj->desc)."\n"; # or use 'say' print $seq_obj->seq() . "\n"; } 将如何成为有效值。

所以

my $first_seq_obj = $stream_obj->next_seq;
print join(' ', $first_seq_obj->display_id, $first_seq_obj->desc)."\n"; # or use 'say'
print $first_seq_obj->seq() . "\n";

应打印所有序列。要获得第一个,只需不要遍历所有结果(这就是我理解你的问题):

将while(){}替换为:

public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable
{..}

public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IEnumerable, IList, ICollection, IReadOnlyList<T>, IReadOnlyCollection<T>
{...}