Ответ 1
? Reduce. Применение Уменьшить (f, x, init, right = FALSE, accumulate = FALSE)
Я хотел бы знать, есть ли реализация функции 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?
? Reduce. Применение Уменьшить (f, x, init, right = FALSE, accumulate = FALSE)
Если вам нужен вектор результатов, это будет работать:
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
.