【问题标题】:Summing up list members step by step逐步总结列表成员
【发布时间】:2017-05-15 12:29:49
【问题描述】:

我遇到了一个非常简单的问题,但我无法在 R 中找到简单的解决方案,因为我习惯于通过迭代其他语言中的递增 for 循环来解决此类问题。

假设我有一个随机分布的数字列表,例如:

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

我想把这个随机分布的模式变成一个不断上升的模式,所以结果看起来像:

[4,7,10,12,17]

【问题讨论】:

  • 这个人很快。您的解决方案有效。您能否将其发布为答案,以便我将其标记为解决方案?

标签: r sum cumulative-sum


【解决方案1】:

尝试使用Reduce 并将accumulate 参数设置为TRUE:

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

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我首先想到的是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))。

    【讨论】:

    • 您的解决方案同样适用于 Reduce 函数,但此函数似乎是专门针对我的问题解决的,因此我将其标记为解决方案。
    • 在 R 方面我还是个新手,所以我很抱歉。对于 C 级评估,您的意思是 cumsum 使用矢量化技术,例如用于迭代列表的应用函数,因此速度更快?
    猜你喜欢
    • 2018-10-16
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2016-03-07
    • 1970-01-01
    • 2018-11-13
    相关资源
    最近更新 更多