假设你有一堆计算,你想使用foreach
. 也许您想在现在或将来并行化它们。每个计算都返回一个数字。获得以这种方式计算的所有数字的平均值的最佳习语是什么?
我想到了两个解决方案,我会将它们作为可能的答案发布,以便您可以单独对它们进行投票和评论,甚至可以对其进行编辑以改进它们。但我想可能有更好的方法,所以欢迎补充答案。我的答案将包括您可以用来展示您自己的技术的示例。
一种解决方案将结果累积成一个总和,并最终将该总和除以迭代次数。
> foreach(i = icount(300), .combine = '+', .inorder = FALSE,
+ .final = function(x) x/300) %do% { i*7 %% 11 }
[1] 1053.5
好处:
foreach
调用缺点:
foreach
。在这个例子中,数字是一个常数,所以这很容易,并且使用单个变量甚至单个向量的长度应该不会更难。但是在迭代跨越多个向量或未知大小的迭代器的情况下,事情可能会变得更加困难,并且由于不一致的修改导致的错误可能会被忽视。一种解决方案将结果累积在一个向量中,并最终在该向量mean
上执行函数。
> foreach(i = icount(300), .combine = c, .inorder = FALSE, .multicombine = TRUE,
+ .final = mean) %do% { i*7 %% 11 }
[1] 1053.5
好处:
foreach
调用mean
使用缺点: