【问题标题】:Counting number of string occurrences in repeated sampling计算重复采样中字符串出现的次数
【发布时间】:2019-09-13 15:32:40
【问题描述】:

我正在尝试完成一个计算遗传学作业问题。当我已知的核苷酸频率(A、T、C、G)都为 0.25 并且我对 1000 个字符长的字符串进行 1000 次采样时,我需要计算二核苷酸“AA”出现的次数。最终,确定“AA”二核苷酸的频率。

SeqLength <- 1000
Nreps <- 1000
x <- c("A", "T", "C", "G")
pi <- c(rep(0.25, 4))
counter <- 0

for (i in 1:Nreps){
    X <- sample(x, SeqLength, replace=TRUE, pi)
    for (j in 1:X - 1){
        if (j == "AA"){
            counter <- counter + 1
        }
    }
}
counter / Nreps

我收到以下错误和警告。它们都有意义,我只是不确定如何解决它们。

Error in 1:X : NA/NaN argument
In addition: Warning messages:
1: In 1:X : numerical expression has 1000 elements: only the first used
2: In 1:X : NAs introduced by coercion

我似乎无法将我脑海中想做的事情转化为功能代码。非常感谢任何帮助/指导/课程。谢谢!!

【问题讨论】:

  • 如果你的XAAA,你有一个AA 还是两个AA
  • 好问题。比方说 2。

标签: r string counter


【解决方案1】:

这是一种方法。您可以使用replicate 执行采样Nreps 次数。对于每个采样的序列,您检查每个位置和其后的位置的核苷酸是否为"A",并将结果逻辑相加得到计数。

SeqLength <- 1000
Nreps <- 1000
x <- c("A", "T", "C", "G")
pi <- c(rep(0.25, 4))
counter <- 0

set.seed(42)
seqs = replicate(n = Nreps,
                 expr = sample(x = x, size = SeqLength, replace = TRUE, prob = pi),
                 simplify = FALSE)
counts = sapply(seqs, function(s){
    sum((s[-1] == "A") & (s[-length(s)] == "A"))
})
mean(counts)
#> [1] 62.321

reprex package (v0.3.0) 于 2019 年 9 月 13 日创建

【讨论】:

  • 谢谢!我明白你上面解释的一切。我唯一好奇的部分是为什么使用 42 作为 set.seed ?
  • 知道了。谢谢!
猜你喜欢
  • 2012-05-31
  • 2011-03-02
  • 2013-11-04
  • 2012-08-11
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
相关资源
最近更新 更多