2012-05-12 15 views
8

I atama R kullanarak ve küçük bir sorun vardır. Atamada, çeşitli matrisler rastgele sayıdaki satırlarla oluşturulmalı ve daha sonra çeşitli hesaplamalar için kullanılmalıdır. Satır sayısı 1 olmadıkça her şey mükemmel çalışır.sat_say (matris) işlevi

Hesaplamalarda farklı şekillerde (örneğin, if (i <= nrow(matrix)) {action}) nrow (matrix) ve matrix[,4] gibi ifadeleri kullanıyorum.

Yani satır sayısı 1 ise (aslında vektör olduğunu biliyorum) R hatalar verir, kesinlikle nrow (1 boyutlu matris) = NULL. Bununla başa çıkmanın basit bir yolu var mı? Aksi Muhtemelen bütün kod yeniden yazılması için, ama ben :(

cevap

4

en vektör x diyelim zamanında çok eksiğim var. Uygun bir (2B) matris içine dönüştürmek için matrix(x) veya t(matrix(x)) kullanmayı deneyin.

+0

Teşekkürler, beni kurtardın - işe yaradı! – Michinio

7

It R'deki tek satırlı/sütun matrislerin ncol/nrowNULL olarak ayarlanmış olması gerekmez. R'de her şey matris gibi davranabilen 1D vektörüdür (örneğin matris olarak gösterilir, matris indekslemeyi kabul eder vb.). dim özelliği ayarlayın. Bu, aksi görünmektedir basit indeksleme içindim düşer ve verileri yaprak tek bir satır ya da sütun için bir matris varsayılan (1D vektör) durumu. Böylece

ya doğrudan (demek o x denir) bir vektörün dim niteliğini yeniden oluşturarak hedefinizi gerçekleştirmek edebilirsiniz:

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

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

VEYA dim bırakarak gelen [] operatörü önleyerek drop=FALSE argüman ekleyerek:

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