gpt4 book ai didi

perl - 使用带有非标准标题的 BioPerl 从 FASTA 文件中提取 DNA 序列

转载 作者:行者123 更新时间:2023-12-04 05:20:53 28 4
gpt4 key购买 nike

我正在尝试使用以下代码从数据库中提取序列:

use strict;
use Bio::SearchIO;
use Bio::DB::Fasta;


my ($file, $id, $start, $end) = ("secondround_merged_expanded.fasta","C7136661:0-107",1,10);
my $db = Bio::DB::Fasta->new($file);
my $seq = $db->seq($id, $start, $end);
print $seq,"\n";

我试图提取的序列的标题是: C7136661:0-107 ,如文件中所示:
>C7047455:0-100
TATAATGCGAATATCGACATTCATTTGAACTGTTAAATCGGTAACATAAGCAGCACACCTGGGCAGATAGTAAAGGCATATGATAATAAGCTGGGGGCTA

当我将标题切换到更标准的内容(如 test )时,代码工作正常。我认为 BioPerl 不喜欢非标准标题。有什么办法可以解决这个问题,这样我就不必重新编码 FASTA 文件了吗?

最佳答案

默认情况下,Bio::DB::Fasta将使用紧跟在 > 之后的所有非空格字符在标题行上形成序列的键。在您的情况下,这看起来像 C7047455:0-100 ,这与子序列的内置缩写相同。如 documented here , 而不是 $db->seq($id, $start, $stop)您可以使用 $db->seq("$id:$start-$stop") ,请调用 $db->seq('C7136661:0-107')看起来你是在问 $db->seq('C7136661', 0, 107) ,并且该键不存在。

我无法知道您的数据中有什么,但是如果仅使用标题的第一部分直到冒号作为键就足够了,那么您可以使用 -makeid回调来修改 key 。那么如果你只使用 C7136661检索它将起作用的序列。

这段代码演示了。请注意,您可能已经有了 .index在您看到任何行为变化之前,您必须删除该缓存文件。

use strict;
use warnings;

use Bio::DB::Fasta;

my ($file, $id, $start, $end) = qw(
secondround_merged_expanded.fasta
C7136661
1 10
);

my $db = Bio::DB::Fasta->new($file, -makeid => \&makeid);

sub makeid {
my ($head) = @_;
$head =~ /^>([^:]+)/ or die qq(Invalid header "$head");
$1;
}

my $seq = $db->seq($id, $start, $end);
print $seq, "\n";

关于perl - 使用带有非标准标题的 BioPerl 从 FASTA 文件中提取 DNA 序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13707302/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com