perl - 生成具有取代率的合成 DNA 序列

标签 perl algorithm bioinformatics dna-sequence

鉴于这些输入:

my $init_seq = "AAAAAAAAAA" #length 10 bp 
my $sub_rate = 0.003;
my $nof_tags = 1000;
my @dna = qw( A C G T );

我要生成:

  1. 一千个长度为 10 的标签

  2. 标签中每个位置的替换率为 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/

相关文章:

algorithm - 用户提供的服务所需的数据库结构建议

android - 使用 Goertzel 算法处理音频信号的结果

r - 组合具有相似基因 ID 的序列

perl - 如何将 N 放入最后的字符串中

perl - 我可以在通过分割有条件地插入散列时避免字符串复制吗?

linux - 如何在perl中创建依赖进程

perl - 如何使用 Perl 在 Windows 上录制 MP3 文件?

algorithm - 如何找到两个NFA的交集

r - 无法在新的 Ubuntu 设备上安装 R 软件包

perl - 在 Matlab 中实时显示 Perl 脚本的输出