2012-03-30 14 views
10
geändert
> 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 wird die 1-dimensionale Matrix in einen Vektor geändert. Kann ich das vermeiden? Ich möchte 1-D-Matrix als Matrix behalten. Eigentlich muss ich viele Arten von Matrix zu RcppArmadillo werfen, sogar Null-D-Matrix. Das Ändern der Matrix in Vektor ist mein Problem.1-dimensionale Matrix wird in R

+0

'Klasse (a [3,])' sagt Ihnen nur den Speichermodus. Sie sollten wahrscheinlich str() verwenden, da es Ihnen die "Länge" sagen würde. –

Antwort

15

Dies ist ein R FAQ. Sie müssen a[3,,drop = FALSE] tun.

9

Sie verwechseln Element-für-Element-Multiplikation und Matrixmultiplikation (siehe ?"*"). Sie wollen %*%:

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

Das ist die richtige Antwort auf die Frage von OP. –