【问题标题】:How can I write a Perl function that can generate a random DNA sequence [closed]如何编写可以生成随机 DNA 序列的 Perl 函数 [关闭]
【发布时间】:2020-02-05 20:00:16
【问题描述】:

我想使用 rand() 函数编写一个 Perl 子例程,该函数生成一个指定长度为 n 的随机 DNA 序列。序列的长度 n 作为参数传递给子例程。 如果有人可以帮助我,我将不胜感激,因为我是 perl 的初学者。

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 我想不出什么办法
  • 这不是代码编写服务,但String::Random 可以满足您的要求。
  • 序列是指碱基序列还是密码子序列? (计算上没有太大区别,但您可能希望您的结果具有一些特定的属性。)

标签: perl subroutine


【解决方案1】:

仅供参考,通常你会放任何你迄今为止尝试过的东西,Stack Overflow 不是代码编写服务。

考虑到这一点,在我看来,最好的方法是使用 Perl 的 rand 函数:

#!/usr/bin/env perl

use strict; use warnings;
use autodie ':all';
use feature 'say';

my @letters = qw(A C G T);

sub random_DNA {
    my $length = shift;
    my $seq = '';
    foreach my $n (1..$length) {
        $seq .= $letters[rand(4)]
    }
    return $seq
}

foreach my $length (1..9) {
    say random_DNA($length)
}

哪个输出

con@V:~/Scripts$ perl random_DNA.pl
T
TT
TGG
TGTC
ATGAC
AACGAG
CGGGGTT
CCGTCGTC
TGGCCTCGA

当然,您的输出可能与此不同,因为这是一个随机函数。如果可以避免使用模块,我宁愿不使用它们,以避免可移植性问题,尤其是对于需要花费一分钟时间编写的任务,例如这个。

【讨论】:

  • DNA 序列在随机中不起作用。原子如何结合在一起有一些物理/化学定律。它变得更加复杂,因为一根链必须连接到关系 AT、CG 上的第二根链以形成螺旋螺旋。 DNA序列应该按照这个规则构建,否则它根本就不是DNA。大自然母亲发明了两个父母将这些信息从父母传递给孩子。原子之间的周结合会发生突变,并且在一些罕见的情况下会发生遗传性遗传死亡。
  • 如果上述信息引发了对生物信息学的兴趣,请访问webpage
  • 当长度为 0 时,返回 undef。在循环之前执行my $s = '';my $s; for ... { ... $s .= ...} 模式中通常很好。
  • @ysth 谢谢,我已经编辑了我的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 2020-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
相关资源
最近更新 更多