减少R中的左侧折叠

Cod*_*lus 2 lambda r fold higher-order-functions

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

假设我有:

v = c(0, 1, 2, 3, 4, 5, 6, 7, 8)
Run Code Online (Sandbox Code Playgroud)

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

对于i的SUM(i-5):

Reduce(function(i) sum(i-5), v, 0)
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢!

edd*_*ddi 7

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

Reduce(function(x,y) {x+y-5}, v, 0)
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这里应该注意,`x`是累加器变量. (2认同)