1-dimensional Matrix is changed to a vector in R

2020-02-01 03:28发布

问题:

> a<-matrix(c(1:9),3,3)
> a
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
> a[3,]*a[,3]  # I expect 1x1 matrix as result of this.
[1] 21 48 81
> class(a)
[1] "matrix"
> class(a[3,])
[1] "integer"

In R, 1-dimensional matrix is changed to a vector. Can I avoid this? I would like to keep 1-D matrix as a matrix. Actually, I need to throw many kind of matrix to RcppArmadillo, even zero-D matrix. Changing matrix to vector by itself is my problem.

回答1:

This is an R FAQ. You need to do a[3,,drop = FALSE].



回答2:

You're confusing element-by-element multiplication and matrix multiplication (see ?"*"). You want %*%:

> a[3,]%*%a[,3]
     [,1]
[1,]  150