Доступна ли функция FoldLeft в 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 API списка)

Кто-нибудь знает, существует ли такая функция в R?

Ответ 1

? Reduce. Применение Уменьшить (f, x, init, right = FALSE, accumulate = FALSE)

Ответ 2

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

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.