逐步总结列表成员
Summing up list members step by step
我有一个非常简单的问题,但我无法在 R 中找到简单的解决方案,因为我习惯于在其他语言中通过迭代递增的 for 循环来解决此类问题。
假设我有一个随机分布的数字列表,例如:
rand.list <- list(4,3,3,2,5)
我想将此随机分布模式更改为不断上升的模式,因此结果如下所示:
[4,7,10,12,17]
尝试使用 Reduce
并将 accumulate
参数设置为 TRUE
:
Reduce("+",rand.list, accumulate = T)
希望对您有所帮助。
我首先想到做 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))
。
我有一个非常简单的问题,但我无法在 R 中找到简单的解决方案,因为我习惯于在其他语言中通过迭代递增的 for 循环来解决此类问题。
假设我有一个随机分布的数字列表,例如:
rand.list <- list(4,3,3,2,5)
我想将此随机分布模式更改为不断上升的模式,因此结果如下所示:
[4,7,10,12,17]
尝试使用 Reduce
并将 accumulate
参数设置为 TRUE
:
Reduce("+",rand.list, accumulate = T)
希望对您有所帮助。
我首先想到做 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))
。