2012-05-12 12 views
8

Ho assegnamento utilizzando R e ho un piccolo problema. Nell'assegnazione devono essere generate diverse matrici con un numero casuale di righe e successivamente utilizzate per vari calcoli. Tutto funziona perfettamente, a meno che il numero di righe sia 1.nrow (matrix) function

Nei calcoli utilizzo nrow (matrice) in diversi modi, ad esempio if (i <= nrow(matrix)) {action} e anche istruzioni come matrix[,4] e così via.

Quindi nel caso in cui il numero di righe sia 1 (so che è in realtà vettoriale) R restituisce errori, sicuramente perché nrow (matrice 1-dimensionale) = NULL. C'è un modo semplice per affrontare questo? In caso contrario, probabilmente tutto il codice deve essere riscritto, ma io sono molto brevi in ​​tempo :(

risposta

4

Chiamiamo vostro vettore x. Provare a utilizzare matrix(x) o t(matrix(x)) per convertirlo in una vera e propria matrice (2D).

+0

Grazie, mi hai salvato - ha funzionato! – Michinio

7

E ' non è che le matrici single-row/col in R hanno ncol/nrow impostato su NULL - in R tutto è un vettore 1D che può comportarsi come una matrice (cioè mostrare come matrice, accettare l'indicizzazione della matrice, ecc.) quando ha un Set di attributi dim Sembra diverso perché l'indicizzazione semplice di una matrice su una singola riga o colonna perdedim e lascia i dati in il suo stato predefinito (vettore 1D).

questo modo è possibile realizzare il vostro obiettivo sia ricreando direttamente attributo dim di un vettore (dire che è chiamato 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 

o impedendo [] operatore di cadere dim aggiungendo drop=FALSE argomento:

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