2

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

假设我有:

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

我想计算所有这些整数的总和,以左侧为中心的 5 个整数:

v 中 i 的 SUM(i-5):

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

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

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

谢谢!

4

2 回答 2

7

这就是您想要的(如果使用Reduce- 对于这种特殊情况显然不是正确的做法,因此这仅用于演示目的):

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

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

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

于 2013-05-03T19:46:48.257 回答
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想要一个有两个参数的函数。

于 2013-05-03T17:44:37.590 回答