2010-06-15 3 views
10

Я хотел бы знать, если есть реализация функции foldLeft (и foldRight?) В R.Доступна ли функция FoldLeft в 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?

ответ

12

? Уменьшить. Использование Уменьшение (е, х, первонач, вправо = FALSE, накапливают = FALSE)

+0

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.

Смежные вопросы