R 如何计算矩阵的和?

R 如何计算矩阵的和?,r,pseudocode,R,Pseudocode,我有一个4 x 10的矩阵。我想计算所有可能的总和。换句话说,如果你有一个2x2的矩阵 2 3 4 1 然后是2^2和(2+3,2+1)和(4+3,4+1)。类似地,如果你有一个2 x 3的矩阵,那么总共有2^3=8个和。允许重复。因为我的矩阵是4x10,所以总数是1048576 在R中,我该如何精确地计算它?伪代码也不错,因为我相当确定我可以翻译成R。但是专门的R包/函数会更好 这个怎么样 m <- matrix(c(2,3,4,1), ncol = 2, byrow = T) app

我有一个4 x 10的矩阵。我想计算所有可能的总和。换句话说,如果你有一个2x2的矩阵

2 3
4 1
然后是2^2和(2+3,2+1)和(4+3,4+1)。类似地,如果你有一个2 x 3的矩阵,那么总共有2^3=8个和。允许重复。因为我的矩阵是4x10,所以总数是1048576

在R中,我该如何精确地计算它?伪代码也不错,因为我相当确定我可以翻译成R。但是专门的R包/函数会更好

这个怎么样

m <- matrix(c(2,3,4,1), ncol = 2, byrow = T)
apply(expand.grid(m[,2],m[,1]),1,sum)
[1] 5 3 7 5

m对于具有任意列数的矩阵,实现这一点的简洁方法是:

rowSums(expand.grid(as.data.frame(m)))
as.data.frame(m)
将矩阵转换为data.frame,这意味着它可以直接传递给
expand.grid
函数,该函数将对每列进行操作
rowSums
有效地计算结果的行和,与使用函数
sum
apply
相比,这将显著提高效率:

m <- matrix(1:40, nrow=4)
system.time(apply(expand.grid(m[,1],m[,2],m[,3],m[,4],m[,5],m[,6],m[,7],m[,8],m[,9],m[,10]),1,sum))
#    user  system elapsed 
#   4.866   0.108   4.971 
system.time(rowSums(expand.grid(as.data.frame(m))))
#    user  system elapsed 
#   0.141   0.030   0.171

这是一个非常好的解决方案。我不得不添加
m[,3],m[,4]
展开.grid
但需要大约6秒的时间才能计算出来!
Reduce(function(x, y) rowSums(expand.grid(x, y)), as.data.frame(m))