我正在寻找一种干净的方式来运行模拟,其中每次迭代都取决于前一次迭代的结果“功能样式”。例如,假设我们想要使用平均值为meanInit
的大小为10的正态分布样本,取样本的平均值并使用它来生成另一个样本,然后重复该过程。使用Reduce
,我们可以执行100次迭代:
meanInit = 0
nextStep <- function(param, step) mean(rnorm(10, param))
Reduce(nextStep, 1:100, meanInit, accumulate = T)
然而,由于我们的函数nextStep
不是真正的二元运算,这感觉有点滥用;实际上,我们忽略了第二个参数step
。有没有另一种执行任务的方法,不要求我们“假装”我们的函数是二进制操作?我正在寻找一个涉及更高阶函数的解决方案。请不要for
循环。
或许这个问题最好以类比的形式陈述:
sapply
是replicate
,因为Reduce
是______?
也就是说,如果我们想要,例如,取100个大小为10的随机正常样本并计算平均值,我们可以(ab)使用sapply
函数忽略其参数,如下所示:
sapply(1:100, function(x) mean(rnorm(10)))
或者我们可以使用replicate
干净地执行相同的任务(无需编写忽略其参数的函数):
replicate(100, mean(rnorm(10)))
我正在寻找Reduce
的类似亲戚。