获得通过foreach计算的值的平均值

时间:2012-12-06 13:51:40

标签: r foreach

假设您有一堆计算,您希望使用foreach执行这些计算。也许你想现在或将来并行化它们。每个计算返回一个数字。获得以这种方式计算的所有数字的平均值的最佳习惯是什么?

我有两个解决方案,我会将其作为可能的答案发布,以便您可以单独投票和评论,甚至可以编辑它们以改进它们。但我想可能会有更好的方法,所以欢迎额外的答案。我的答案将包括您可以采用的示例来演示您自己的技术。

2 个答案:

答案 0 :(得分:0)

一个解决方案将结果累积到一个向量中,并最终在其上执行mean函数。

> foreach(i = icount(300), .combine = c, .inorder = FALSE, .multicombine = TRUE,
+         .final = mean) %do% { i*7 %% 11 }
[1] 1053.5

优点:

  • 也可以使用嵌套的foreach调用
  • 使用除mean以外的聚合函数
  • 不需要任何有关迭代中值的数量的知识

缺点:

  • 首先将所有结果收集到一个向量中,这可能会消耗不必要的内存量,尤其是在执行大量非常小的作业时。

答案 1 :(得分:0)

一种解决方案将结果累积为一个总和,并最终将此总和除以迭代次数。

> foreach(i = icount(300), .combine = '+', .inorder = FALSE,
+         .final = function(x) x/300) %do% { i*7 %% 11 }
[1] 1053.5

优点:

  • 只需要一个数字和的内存,这应该是性能增益
  • 也可以使用嵌套的foreach调用

缺点:

  • 必须在foreach的参数列表中重复迭代次数。在这个例子中,数字是一个常数,所以这很容易,使用单个变量甚至单个向量的长度应该不会更难。但是在迭代跨越多个向量或未知大小的迭代器的情况下,事情可能会变得更加困难,并且由于不一致的修改而导致的错误可能会被忽视。