嗨,每个爱恨的人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'LT; -M [,C(3:1)] R会给你
N
[1] 3 2 1
现在N是一个向量!不是矩阵!
我的解决方案是 N'LT; -M%*%DIAG(3)[,C(3:1)] 然而,它需要很大的空间来存储单位矩阵。
有更好的主意吗?
答案 0 :(得分:7)
您正在寻找:
N<-M[,c(3:1),drop = FALSE]
阅读?Extract
了解详情。这也是FAQ。这种行为是人们对“应该”在R中的方式最常见的争论之一。我的总体印象是,很多人都认为drop = FALSE
可能是一个更合理的默认,但这种行为是如此之久以至于改变它将极大地破坏大量现有代码。
答案 1 :(得分: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