如何对R矩阵值求和

e0uiprwp  于 2023-02-01  发布在  其他
关注(0)|答案(1)|浏览(178)

我需要遍历下面的矩阵,并对列索引或行索引等于该位置的值的每个位置的值求和
mtr = matrix(rep(1:16),8,4)
我完全是R的初学者,不知道如何解决这个问题

2w2cym1i

2w2cym1i1#

使用sapply来分别检查行和列,将row_check的转置乘以col_check来查看哪些TRUE元素是公共的,从row_checkcol_check的和中减去双重计数:

mtr = matrix(rep(1:16),8,4)
row_check <- sapply(1:8, function(x) mtr[x, ] == x)
col_check <- sapply(1:4, function(x) mtr[, x] == x)
cross_check <- t(row_check) * col_check
final_sum <- sum(row_check, col_check, -cross_check)
final_sum
[1] 16

mtr
     [,1] [,2] [,3] [,4]
[1,]    1    9    1    9
[2,]    2   10    2   10
[3,]    3   11    3   11
[4,]    4   12    4   12
[5,]    5   13    5   13
[6,]    6   14    6   14
[7,]    7   15    7   15
[8,]    8   16    8   16

目视检查显示,列1、3中的每个元素都符合行索引测试,因此总共16个元素。元素1、1和3、3符合列索引测试,因此总共2个元素。但是它们重复计数。您必须解释我是如何误解您的问题的。如果您希望包括重复计数,请省略交叉检查并设置:

final_sum <- sum(row_check, col_check)

相关问题