本文介绍了生成具有置换率的合成DNA序列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给出以下输入:

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的标签

  1. One thousand length-10 tags

标签中每个位置的替换率为0.003

Substitution rate for each position in a tag is 0.003

产生如下输出:

AAAAAAAAAA
AATAACAAAA
.....
AAGGAAAAGA # 1000th tags

在Perl中有一种紧凑的方法吗?

Is there a compact way to do it in Perl?

我坚持以该脚本的逻辑为核心:

I am stuck with the logic of this script as core:

#!/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++;
    }

推荐答案

作为一个小的优化,替换为:

As a small optimisation, replace:

    $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)];

这篇关于生成具有置换率的合成DNA序列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-26 09:47