鉴于这些输入:
my $init_seq = "AAAAAAAAAA" #length 10 bp
my $sub_rate = 0.003;
my $nof_tags = 1000;
my @dna = qw( A C G T );
我要生成:
一千个长度为 10 的标签
标签中每个位置的替换率为 0.003
产生如下输出:
AAAAAAAAAA
AATAACAAAA
.....
AAGGAAAAGA # 1000th tags
在 Perl 中是否有一种紧凑的方法来做到这一点?
我坚持这个脚本的核心逻辑:
#!/usr/bin/perl
my $init_seq = "AAAAAAAAAA" #length 10 bp
my $sub_rate = 0.003;
my $nof_tags = 1000;
my @dna = qw( A C G T );
$i = 0;
while ($i < length($init_seq)) {
$roll = int(rand 4) + 1; # $roll is now an integer between 1 and 4
if ($roll == 1) {$base = A;}
elsif ($roll == 2) {$base = T;}
elsif ($roll == 3) {$base = C;}
elsif ($roll == 4) {$base = G;};
print $base;
}
continue {
$i++;
}
最佳答案
作为一个小的优化,替换:
$roll = int(rand 4) + 1; # $roll is now an integer between 1 and 4
if ($roll == 1) {$base = A;}
elsif ($roll == 2) {$base = T;}
elsif ($roll == 3) {$base = C;}
elsif ($roll == 4) {$base = G;};
与
$base = $dna[int(rand 4)];
关于perl - 生成具有取代率的合成 DNA 序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/601727/