R从一个矩阵行中减去另一个矩阵行中的元素

R从一个矩阵行中减去另一个矩阵行中的元素,r,R,以这些矩阵为例 mat1<- matrix(c(1:30),ncol=3) [,1] [,2] [,3] [1,] 1 11 21 [2,] 2 12 22 [3,] 3 13 23 [4,] 4 14 24 [5,] 5 15 25 [6,] 6 16 26 [7,] 7 17 27 [8,] 8 18 28 [9,] 9 19 29 [10,]

以这些矩阵为例

mat1<- matrix(c(1:30),ncol=3)

     [,1] [,2] [,3]
[1,]    1   11   21
[2,]    2   12   22
[3,]    3   13   23
[4,]    4   14   24
[5,]    5   15   25
[6,]    6   16   26
[7,]    7   17   27
[8,]    8   18   28
[9,]    9   19   29
[10,]   10   20   30



mat2 <- matrix(c(5,rep(1,9),5.4,rep(2,9),5.5,rep(3,9)),ncol=3)

    [,1] [,2] [,3]
[1,]    5  5.4  5.5
[2,]    1  2.0  3.0
[3,]    1  2.0  3.0
[4,]    1  2.0  3.0
[5,]    1  2.0  3.0
[6,]    1  2.0  3.0
[7,]    1  2.0  3.0
[8,]    1  2.0  3.0
[9,]    1  2.0  3.0
你并没有真正得到那个结果。 我不完全明白这里发生了什么。。。似乎第一行
mat2
的元素在减法过程中是交替的

它与

matrix(c(mat1[,1]-mat2[1,1],mat1[,2]-mat2[1,2],mat1[,3]-mat2[1,3]),ncol=3)
但就我的数据而言,它变得非常混乱


有什么想法吗

如果你想使用向量循环,你需要知道矩阵是按列填充的,循环是按那个方向进行的。因此,您需要转置矩阵:

t(t(mat1)-mat2[1,])
#      [,1] [,2] [,3]
# [1,]   -4  5.6 15.5
# [2,]   -3  6.6 16.5
# [3,]   -2  7.6 17.5
# [4,]   -1  8.6 18.5
# [5,]    0  9.6 19.5
# [6,]    1 10.6 20.5
# [7,]    2 11.6 21.5
# [8,]    3 12.6 22.5
# [9,]    4 13.6 23.5
#[10,]    5 14.6 24.5
或者你可以:

 mat1-mat2[1,col(mat2)]
   #      [,1] [,2] [,3]
   #[1,]   -4  5.6 15.5
   #[2,]   -3  6.6 16.5
   #[3,]   -2  7.6 17.5
   #[4,]   -1  8.6 18.5
   #[5,]    0  9.6 19.5
   #[6,]    1 10.6 20.5
   #[7,]    2 11.6 21.5
   #[8,]    3 12.6 22.5
   #[9,]    4 13.6 23.5
  #[10,]    5 14.6 24.5

啊,我怕跟这个有关系。谢谢!
 mat1-mat2[1,col(mat2)]
   #      [,1] [,2] [,3]
   #[1,]   -4  5.6 15.5
   #[2,]   -3  6.6 16.5
   #[3,]   -2  7.6 17.5
   #[4,]   -1  8.6 18.5
   #[5,]    0  9.6 19.5
   #[6,]    1 10.6 20.5
   #[7,]    2 11.6 21.5
   #[8,]    3 12.6 22.5
   #[9,]    4 13.6 23.5
  #[10,]    5 14.6 24.5