2016-12-31 64 views
1

我有一個非常簡單的問題,但我無法在R中找到一個簡單的解決方案,因爲我曾經通過遍歷其他語言的遞增for-loop來解決此類問題。總結名單成員一步一步

比方說,我有一個隨機分佈的數字列表,如:

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

您的解決方案同樣適用於Reduce功能,但此功能似乎特別針對我的問題,因此我將其標記爲解決方案。 – MayaK

+0

當談到R時,我還是一個新手,所以我很抱歉。使用C級評估意味着cumsum正在使用向量化技術,比如那些應用迭代列表的函數,因此速度更快? – MayaK

2

嘗試使用Reduceaccumulate參數集TRUE

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

我希望這有助於。