2016-12-31 5 views
1

У меня очень простая проблема, но я не смог найти простое решение в R, потому что я был использован для решения таких проблем, итерации с помощью инкрементного цикла на других языках.Подведение итогов членов списка шаг за шагом

Скажем, у меня есть случайный распределенный числовой список, как:

rand.list <- list(4,3,3,2,5) 

я хотел бы изменить эту случайную распределенную картину в постоянно восходящей модель, так что результат будет выглядеть следующим образом:

[4,7,10,12,17] 
+0

Человек, который был быстрым. Ваше решение работает. Не могли бы вы опубликовать это в качестве ответа, чтобы я мог отметить его как решение? – MayaK

ответ

1

Сначала мне приходилось делать cumsum(unlist(rand.list)), где unlist сворачивает список в простой вектор. Однако моя удачная попытка показывает, что также работает cumsum(rand.list).

Не совсем понятно, как эта работа, так как исходный код cumsum вызывает .Primitive, внутренний диспетчер методов S3, который нелегко продолжить исследовать. Но я сделать еще один комплементарный эксперимент следующим образом:

x <- list(1:2,3:4,5:6) 
cumsum(x) ## does not work 

x <- list(c(1,2), c(3,4), c(5,6)) 
cumsum(x) ## does not work 

В этом случае мы должны сделать cumsum(unlist(x)).

+0

Ваше решение одинаково хорошо работает с функцией «Уменьшить», но эта функция, как представляется, специально предназначена для моей проблемы, поэтому я отмечаю ее как решение. – MayaK

+0

Я до сих пор не знаю, когда дело доходит до R, поэтому я прошу прощения. С оценкой уровня C вы подразумеваете, что cumsum использует методы векторизации, подобные тем, которые применяют функции для повторных списков, и поэтому быстрее? – MayaK

2

Попробуйте использовать Reduce с набором accumulate параметров в TRUE:

Reduce("+",rand.list, accumulate = T) 

Надеюсь, это поможет.

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