我需要遍历下面的矩阵,并对列索引或行索引等于该位置的值的每个位置的值求和mtr = matrix(rep(1:16),8,4)我完全是R的初学者,不知道如何解决这个问题
mtr = matrix(rep(1:16),8,4)
2w2cym1i1#
使用sapply来分别检查行和列,将row_check的转置乘以col_check来查看哪些TRUE元素是公共的,从row_check和col_check的和中减去双重计数:
sapply
row_check
col_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)
1条答案
按热度按时间2w2cym1i1#
使用
sapply
来分别检查行和列,将row_check
的转置乘以col_check
来查看哪些TRUE元素是公共的,从row_check
和col_check
的和中减去双重计数:目视检查显示,列1、3中的每个元素都符合行索引测试,因此总共16个元素。元素1、1和3、3符合列索引测试,因此总共2个元素。但是它们重复计数。您必须解释我是如何误解您的问题的。如果您希望包括重复计数,请省略交叉检查并设置: