Rold中的FoldLeft功能是否可用?

时间:2010-06-15 04:00:05

标签: r functional-programming list

我想知道R中是否有foldLeft函数(和foldRight?)的实现。

该语言应该是“相当”功能导向的,因此我认为应该有这样的东西,但我在文档中找不到它。

对我来说,foldLeft功能适用于列表并具有以下签名:

foldLeft[B](z : B)(f : (B, A) => B) : B

应该返回以下结果:

f(... (f(f(z, a0), a1) ...), an) if the list is [a0, a1, ..., an].

(我使用Scala List API的定义)

有人知道R中是否存在这样的功能吗?

2 个答案:

答案 0 :(得分:12)

?降低。 用法 减少(f,x,init,right = FALSE,accumulate = FALSE)

答案 1 :(得分:1)

如果你想要一个结果向量,这将有效:

foldl = function(f, v, x) {w = v; for (i in 1 : length(v)) { x = w[[i]] = f(x, v[[i]]) }; w }

现在您可以将cumsum重新定义为

cumsum(v) = foldl(function(x,y) { x+y }, v, 0)

要改进它,您应该处理Reduce之类的缺失值。