2012-05-12 19 views
8

Mam zadanie przy użyciu R i mam mały problem. W zadaniu należy wygenerować kilka macierzy z losową liczbą rzędów, a następnie użyć ich do różnych obliczeń. Wszystko działa idealnie, chyba że liczba wierszy wynosi 1.funkcja nrow (macierz)

W obliczeniach używam Nrow (macierz) na różne sposoby, na przykład if (i <= nrow(matrix)) {action}, a także instrukcje takie jak matrix[,4] i tak dalej.

Tak więc w przypadku, gdy liczba wierszy wynosi 1 (wiem, że to w rzeczywistości wektor) R daje błędy, zdecydowanie dlatego, że nrow (macierz jednowymiarowa) = NULL. Czy istnieje prosty sposób radzenia sobie z tym? W przeciwnym razie prawdopodobnie cały kod muszą być zapisane, ale jestem bardzo krótki czas :(

Odpowiedz

4

Nazwijmy Twój wektor x. Spróbuj użyć matrix(x) lub t(matrix(x)) aby przekształcić go w odpowiedniej matrycy (2D).

+0

Dzięki, uratowałeś mnie - zadziałało! – Michinio

7

It nie jest to, że macierze jednorzędowe/col w R mają ncol/ustawione na NULL - w R wszystko jest wektorem 1D, który może zachowywać się jak macierz (tj. pokazać jako macierz, zaakceptować indeksowanie macierzy, itp.), gdy ma on dim Zestaw atrybutów wydaje się być inaczej, ponieważ proste indeksowanie macierzy do pojedynczego wiersza lub kolumny upuszczadim i pozostawia dane w jego domyślny stan (wektor 1D).

W ten sposób można osiągnąć swój cel albo przez bezpośrednie odtworzenie atrybutu dim wektora (powiedzmy to nazywa 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 

lub poprzez zapobieganie [] operatora przed wypadnięciem dim dodając drop=FALSE argument:

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