请记住,R 中的许多函数都是矢量化的
> rnorm(length(ns), mean=ns)
[1] 9.905652 19.721717 40.462751 78.982971 160.770257
(在您的问题中,ni[n]创建一个与 的最大值相同的向量n,即 160 个元素)。
有趣的是,这是从sapply@VictorK 提供的解决方案演变而来的。
sapply(ns, function(n) round(rnorm(1, mean = n, sd = 1)))
分解round并删除默认参数sd = 1,所以
round(sapply(ns, function(n) rnorm(1, mean = n)))
然后认识到如果我们将它命名为调用中的第一个参数,它rnorm可以替换匿名函数。的第一个参数是 named ,所以事情有点混乱;但我们强制 的元素匹配第二个参数。例如第一次通过我们评估的 sapply 。R 首先按名称匹配参数,因此 n=1 匹配 的第一个参数,然后按其余参数中的位置匹配,因此未命名的参数匹配下一个可用参数,)function(n) ...sapplyrnormnnsmeanrnorm(ns[[1]], n=1)rnormns[[1]]mean
round(sapply(ns, rnorm, n = 1))
然后也许我们会看到完全矢量化的解决方案
round(rnorm(n = length(ns), mean = ns))