我使用高阶函数将函数应用于向量中的每个元素,并将结果作为标量值返回。
假设我有:
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函数出了什么问题?
谢谢!
答案 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
想要一个双参数函数。