2012-05-12 4 views
8

Rを使用して割り当てがあり、少し問題があります。代入では、いくつかの行列を乱数列で生成し、後でさまざまな計算に使用する必要があります。nrow(行列)関数

計算では、さまざまな方法でnrow(行列)を使用します。たとえば、if (i <= nrow(matrix)) {action}matrix[,4]などの文も使用します。

したがって、行数が1の場合(実際にベクトルであることはわかっています)、Rは誤差を与えます。なぜなら、nrow(1次元行列)= NULLであるからです。これに対処する簡単な方法はありますか?そうでなければ、おそらく全体のコードは:(

答えて

4

のは、あなたのベクトルxを呼ぶことにしましょう。適切な(2D)行列に変換するmatrix(x)t(matrix(x))を使用してみてください。

+0

ありがとうございました。私を救った - それはうまくいった! – Michinio

7

時間に書き換える必要がありますが、私は非常に短いですRの単列/ col行列はncol/nrowNULLに設定されています - すべてが1Dベクトルです。これは行列のように振る舞います(つまり、行列として表示、行列のインデックス付けなどを受け入れることができます)。 dim属性が設定されています。単一行または列に単純にインデックスを付けるとdimになり、そのデフォルト(1Dベクトル)状態。

このようにあなたが直接ベクトルのdim属性(それが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 drop=FALSE引数を追加することにより、dimを落とすから[]オペレータを防止することによって:

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