【问题标题】:How to get sum of the list using mapply in r如何在r中使用mapply获取列表的总和
【发布时间】:2013-12-18 23:48:43
【问题描述】:

我有一个包含 100 个元素的列表,每个元素包含 431 个元素。

我想使用 mapply 对每个列表中的值求和。例如,假设我有一个包含 5 个元素的列表,但每个元素还有另外 5 个元素。

> o
[[1]]
[1] 1 2 3 4 5

[[2]]
[1] 1 2 3 4 5

[[3]]
[1] 1 2 3 4 5

[[4]]
[1] 1 2 3 4 5

[[5]]
[1] 1 2 3 4 5

> mapply(sum, o[[1]], o[[2]], o[[3]], o[[4]], o[[5]])
[1]  5 10 15 20 25

但是对于 100 个元素,我该如何做到这一点。输入 100 个元素作为 args 是不可行的。有人可以帮忙吗?

谢谢

【问题讨论】:

    标签: r mapply


    【解决方案1】:

    我明白了。我用Reduce("+", o) 代替mapply

    【讨论】:

      【解决方案2】:

      使用do.call

      mapply_sum = function(...){mapply(sum, ...)}
      do.call(mapply_sum, o)
      

      【讨论】:

      • 您发布的Reduce 解决方案更优雅恕我直言。
      【解决方案3】:

      @Ramnath 答案的变化:

      do.call(mapply,c(sum,o))
      #[1]  5 10 15 20 25
      

      但是,mapply 似乎比在 op 的回答中使用 Reduce 慢得多:

      o <- replicate(1000,1:1000,simplify=FALSE)
      
      system.time(Reduce("+", o))
      #   user  system elapsed 
      #   0.02    0.00    0.01 
      
      system.time(do.call(mapply,c(sum,o)))
      #   user  system elapsed 
      #   0.94    0.00    0.93 
      

      【讨论】:

      • 这样更优雅。
      猜你喜欢
      • 1970-01-01
      • 2018-10-09
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      相关资源
      最近更新 更多