减少R中的左侧折叠

时间:2013-05-03 17:28:15

标签: r lambda fold higher-order-functions

我使用高阶函数将函数应用于向量中的每个元素,并将结果作为标量值返回。

假设我有:

v = c(0, 1, 2, 3, 4, 5, 6, 7, 8)

我想计算左边5个整数的所有这些整数的总和:

我在v中的SUM(i-5):

Reduce(function(i) sum(i-5), v, 0)

我收到以下错误:Error in f(init, x[[i]]) : unused argument(s) (x[[i]])

我的lambda函数出了什么问题?

谢谢!

2 个答案:

答案 0 :(得分:7)

这就是你想要的(如果使用Reduce - 显然不适合这个特殊情况,所以这只是为了演示目的):

Reduce(function(x,y) {x+y-5}, v, 0)

这将从v的左侧开始,将添加下一个元素并减去5并继续这样做,直到它到达v的末尾。

您应该能够看到如何修改以放置两个元素(累积的一个元素和下一个元素)的任意函数,而不是您为问题选择的元素。

答案 1 :(得分:3)

请阅读Reduce的帮助页面。具体地,

Arguments:

   f: a function of the appropriate arity (binary for ‘Reduce’,
      unary for ‘Filter’, ‘Find’ and ‘Position’, k-ary for ‘Map’ if
      this is called with k arguments).  An arbitrary predicate
      function for ‘Negate’.

您的函数是单个参数函数。 Reduce想要一个双参数函数。