R

时间:2016-12-08 23:40:25

标签: r functional-programming higher-order-functions sapply markov

我正在寻找一种干净的方式来运行模拟,其中每次迭代都取决于前一次迭代的结果“功能样式”。例如,假设我们想要使用平均值为meanInit的大小为10的正态分布样本,取样本的平均值并使用它来生成另一个样本,然后重复该过程。使用Reduce,我们可以执行100次迭代:

meanInit = 0
nextStep <- function(param, step) mean(rnorm(10, param))
Reduce(nextStep, 1:100, meanInit, accumulate = T)

然而,由于我们的函数nextStep不是真正的二元运算,这感觉有点滥用;实际上,我们忽略了第二个参数step。有没有另一种执行任务的方法,不要求我们“假装”我们的函数是二进制操作?我正在寻找一个涉及更高阶函数的解决方案。请不要for循环。

或许这个问题最好以类比的形式陈述:

sapplyreplicate,因为Reduce是______?

也就是说,如果我们想要,例如,取100个大小为10的随机正常样本并计算平均值,我们可以(ab)使用sapply函数忽略其参数,如下所示:

sapply(1:100, function(x) mean(rnorm(10)))

或者我们可以使用replicate干净地执行相同的任务(无需编写忽略其参数的函数):

replicate(100, mean(rnorm(10)))

我正在寻找Reduce的类似亲戚。

0 个答案:

没有答案