R语言中是否有FoldLeft函数可用?

10

我想知道在R语言中是否有foldLeft函数的实现(以及foldRight)。

R语言被认为是“相当”函数化的,因此我认为应该有类似的功能,但我在文档中找不到它。

对我来说,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个回答

12

?Reduce. 使用方法 Reduce(f,x,init,right = FALSE,accumulate = FALSE)


arf。我知道我在某个地方看过它!你知道是否有一个专门用于列表处理的包含有最优功能的软件包吗?还是它们都已经在基础软件包中实现了,而我没有找到它们? - SRKX

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 一样处理缺失值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接