Доступна ли функция FoldLeft в R? - PullRequest
10 голосов
/ 15 июня 2010

Я хотел бы знать, если в 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 ]

12 голосов
/ 15 июня 2010

? Reduce. использование Уменьшить (f, x, init, right = FALSE, накапливать = FALSE)

1 голос
/ 06 марта 2015

Если вам нужен вектор результатов, это будет работать:

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 делает.

...