7

大家好,爱恨R的人:

假设你想把矩阵 M

      [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9

到 N

       [,1] [,2] [,3]
[1,]    3    2    1
[2,]    6    5    4
[3,]    9    8    7

你需要做的就是

N<-M[,c(3:1)]

而N的结构还是一个矩阵

然而,当你想把矩阵 M

       [,1] [,2] [,3]
[1,]    1    2     3  

到 N

       [,1] [,2] [,3]
[1,]    3    2     1  

如果你这样做 N<-M[,c(3:1)] R 会给你

N
[1] 3 2 1

N 现在是一个向量!不是矩阵!

我的解决方案是 N<-M%*%diag(3)[,c(3:1)] 但是它需要很大的空间来存储单位矩阵。

有更好的主意吗?

4

2 回答 2

9

你正在寻找这个:

N<-M[,c(3:1),drop = FALSE] 

阅读?Extract以获取更多信息。这也是一个常见问题解答。这种行为是人们对 R 中“应该”的方式最常见的争论之一。我的总体印象是,许多人同意这drop = FALSE可能是一个更明智的默认设置,但这种行为太老了,以至于改变它会是巨大的破坏大量现有代码。

于 2013-11-07T20:23:34.327 回答
1
A=t(matrix(1:25,5,5))
B=matrix(0,5,5)
for(i in 1:5){
  B[i,(nrow(A)+1-i)]=1
}

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

A%*%B
# [,1] [,2] [,3] [,4] [,5]
# [1,]    5    4    3    2    1
# [2,]   10    9    8    7    6
# [3,]   15   14   13   12   11
# [4,]   20   19   18   17   16
# [5,]   25   24   23   22   21
于 2013-11-06T21:11:17.717 回答