2010-06-15 72 views
10

我想知道是否有在R的foldLeft函數(和foldRight?)的實現。R中有FoldLeft函數嗎?

該語言應該是「相當」功能導向,因此我認爲應該有這樣的事情,但我在文檔中找不到它。

對我來說,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中?

回答

12

?減少。 用法 減少(F,X,初始化,右= FALSE,積累= FALSE)

+0

arf。我知道我曾經在某處看過它! 你知道是否有專門用於優化功能的列表處理的包?還是它們都已經在基礎包中實現了,我沒有找到它們? – SRKX 2010-06-15 05:43:47

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這樣的缺失值。