请记住,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) ...
sapply
rnorm
n
ns
mean
rnorm(ns[[1]], n=1)
rnorm
ns[[1]]
mean
round(sapply(ns, rnorm, n = 1))
然后也许我们会看到完全矢量化的解决方案
round(rnorm(n = length(ns), mean = ns))