2012-05-12 4 views
8

Ich habe Zuordnung mit R und habe ein kleines Problem. In der Zuweisung müssen mehrere Matrizen mit einer zufälligen Anzahl von Zeilen erzeugt und später für verschiedene Berechnungen verwendet werden. Alles funktioniert perfekt, wenn die Anzahl der Zeilen 1 ist.nrow (Matrix) -Funktion

In den Berechnungen verwende ich nrow (Matrix) auf verschiedene Arten, zum Beispiel if (i <= nrow(matrix)) {action} und auch Aussagen wie matrix[,4] und so weiter.

Also, wenn die Anzahl der Zeilen 1 ist (ich weiß, es ist tatsächlich Vektor) R geben Fehler, definitiv weil nrow (1-dimensionale Matrix) = NULL. Gibt es einen einfachen Weg, damit umzugehen? Ansonsten wahrscheinlich ganze Code haben neu geschrieben werden, aber ich bin sehr kurz in der Zeit :(

Antwort

4

nennen Lassen Sie Ihren Vektor x. Versuchen Sie matrix(x) oder t(matrix(x)) mit ihm in eine richtige (2D) Matrix zu konvertieren.

+0

Danke, du hast mich gerettet - es hat funktioniert! – Michinio

7

Es ist nicht das single-row/col-Matrizen in R ncol/nrow auf NULL gesetzt - in R ist alles ein 1D-Vektor, der sich wie Matrix verhalten kann (dh als Matrix anzeigen, Matrix-Indizierung akzeptieren, etc.), wenn es a hat dim attribute set.Es scheint anders, weil einfache Indizierung einer Matrix zu einer einzelnen Zeile oder Spalte dim 0 0 fällt und die Daten in sein Standardzustand (1D Vektor).

So können Sie Ihr Ziel erreichen entweder durch direkte Neue dim Attribut eines Vektors (sagen, es heißt x):

dim(x)<-c(length(x),1) 
x #Now a single column matrix 

dim(x)<-c(1,length(x)) 
x #Now a single row matrix 

OR durch die Verhinderung [] Betreiber von dim fallen durch Zugabe von drop=FALSE Argumente:

x<-matrix(1:12,3,4) 
x    #OK, matrix 
x[,3]   #Boo, vector 
x[,3,drop=FALSE] #Matrixicity saved! 
Verwandte Themen