在R

在R,r,random,R,Random,我在R中生成随机的DNA序列,其中每个序列都有一个固定的长度,并且包含用户指定的核苷酸分布 我想做的是确保特定的核苷酸序列不会在给定的序列中产生。不允许的跑步包括:“aga”、“agg”、“taa”、“tag”和“tga” 下面是我的代码,它只生成可能发生上述运行的序列。我不确定如何最好地修改代码来解释上面指定的“tabu”运行 library(ape) length.seqs <- 100 # length of DNA sequence nucl.freqs <- rep(1/

我在R中生成随机的DNA序列,其中每个序列都有一个固定的长度,并且包含用户指定的核苷酸分布

我想做的是确保特定的核苷酸序列不会在给定的序列中产生。不允许的跑步包括:“aga”、“agg”、“taa”、“tag”和“tga”

下面是我的代码,它只生成可能发生上述运行的序列。我不确定如何最好地修改代码来解释上面指定的“tabu”运行

library(ape)

length.seqs <- 100 # length of DNA sequence
nucl.freqs <- rep(1/4, 4) # nucleotide frequencies

# DNA alphabet
nucl <- as.DNAbin(c('a', 'c', 'g', 't')) # A, C, G, T

# Randomly sample nucleotides
seqs <- sample(nucl, size = length.seqs, replace = TRUE, prob = nucl.freqs) 
库(ape)

length.seqs您可以按如下方式对其进行正则化:

length.seqs <- 100 # length of DNA sequence
nucl.freqs <- rep(1/4, 4) # nucleotide frequencies
nucl <- c('a', 'c', 'g', 't') # A, C, G, T

seqs <- sample(nucl, size = length.seqs, replace = TRUE, prob = nucl.freqs)

bad_codons <- c("aga", "agg", "taa", "tag", "tga")

regx <- paste0("(", paste(bad_codons, collapse = ")|("), ")")

s <- paste(seqs, collapse = "")

while( grepl(regx, s) ) {
  s <- gsub(regx,
            paste(sample(nucl, size = 3, replace = TRUE, prob = nucl.freqs), collapse = ""),
            s)
}

s
grepl(regex, s)

length.seqs您可以按如下方式对其进行正则化:

length.seqs <- 100 # length of DNA sequence
nucl.freqs <- rep(1/4, 4) # nucleotide frequencies
nucl <- c('a', 'c', 'g', 't') # A, C, G, T

seqs <- sample(nucl, size = length.seqs, replace = TRUE, prob = nucl.freqs)

bad_codons <- c("aga", "agg", "taa", "tag", "tga")

regx <- paste0("(", paste(bad_codons, collapse = ")|("), ")")

s <- paste(seqs, collapse = "")

while( grepl(regx, s) ) {
  s <- gsub(regx,
            paste(sample(nucl, size = 3, replace = TRUE, prob = nucl.freqs), collapse = ""),
            s)
}

s
grepl(regex, s)

length.seqs谢谢!最终,我需要速度,因为我的目标是生成数百个序列。不过,这是一个很好的实现,也是一个很好的开始。我想我会为其他有兴趣提供回复的人延长帖子的开放时间。谢谢!最终,我需要速度,因为我的目标是生成数百个序列。然而,这是一个很好的实现,也是一个很好的开始。我想我会为其他有兴趣提供回复的人延长帖子的开放时间。