【问题标题】:Add all elements in matrix R将矩阵 R 中的所有元素相加
【发布时间】:2015-05-16 16:18:27
【问题描述】:

我正在尝试将所有元素添加到矩阵中。这是我的矩阵的一个例子(实际的矩阵更大):

 m = matrix(c(528,479,538,603),nrow=2,ncol=2)
 m
                   A            B
male              528          538
female            479          603

我正在努力:

 sum.elements = colSums(colSums(m))

但它给出了以下错误:

colSums(colSums(m)) 中的错误:“x”必须是至少包含两个的数组 尺寸

我已经尝试过:

x = colSums(m)
sum.elements = x[1] + x[2]

但是当你有一个 100 列的矩阵时,这会很长......

任何帮助将不胜感激!

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    你可以sum。它还具有选项 na.rm 以删除 NA 值。

     sum(m)
     #[1] 2148
    

    一般来说,sum 适用于 vectormatrixdata.frame

    基准测试

     set.seed(24)
     m1 <- matrix(sample(0:20, 5000*5000, replace=TRUE), ncol=5000)
     system.time(sum(m1))
     #  user  system elapsed 
     # 0.027   0.000   0.026 
    
     system.time(sum(colSums(m1)))
     # user  system elapsed 
     # 0.027   0.000   0.027 
    
     system.time(Reduce('+', m1))
     #  user  system elapsed 
     #25.977   0.644  26.673 
    

    【讨论】:

      【解决方案2】:

      Reduce 可以工作

       Reduce(`+`,m)
          [1] 2148
      

      【讨论】:

      • 我认为Reduce 会更快,但它有点慢
      • 还要注意Reduce的含义:看看Reduce("+",iris[,1:4])sum(iris[,1:4])的区别。
      • @nicola 那是因为它是一个data.frame,对吧?
      • @akrun 确实如此。 Reduce(fun,obj) 所做的是评估fun(obj[[1]],obj[[2]]),获取结果然后调用fun(res,obj[[3]]) 等等。各种obj[[i]] 是什么取决于obj 是什么。
      • @akrun, Reduce 对于任何实际大小的任何数组,都不可避免地要慢得多。您获得 R -> C 开销的次数与元素数量一样多 - 1,而与 sum 一样,您只需获得一次。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 2015-05-20
      • 1970-01-01
      • 2016-11-13
      • 1970-01-01
      • 2018-02-23
      • 2022-08-17
      相关资源
      最近更新 更多