8

Rを使用した割り当てがあり、少し問題があります。割り当てでは、乱数の行でいくつかの行列を生成し、後でさまざまな計算に使用する必要があります。行数が1でない限り、すべてが完璧に機能します。

計算では、nrow(matrix) をさまざまな方法で使用します。たとえばif (i <= nrow(matrix) ) {action}、ステートメントなどもmatrix[,4]使用します。

したがって、行数が1の場合(実際にはベクトルであることはわかっています)、Rは間違いなくnrow(1次元行列)= NULLであるため、エラーになります。これに対処する簡単な方法はありますか?それ以外の場合は、おそらくコード全体を書き直す必要がありますが、時間が非常に短いです:(

4

2 に答える 2

7

R の単一行/列行列がncol/nrowに設定されているわけではありません。R では、属性が設定されNULLている場合、すべてが行列のように動作できる 1D ベクトルです (つまり、行列として表示し、行列のインデックス付けを受け入れるなど)。dim. マトリックスを単一の行または列に単純にインデックス付けすると、データがデフォルト ( 1D dimベクトル) の状態のままになるため、そうではないようです。

したがって、ベクトルの属性を直接再作成することにより、目標を達成できます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

または、引数を追加して[]演算子がドロップしないようにする:dimdrop=FALSE

x<-matrix(1:12,3,4)
x                #OK, matrix
x[,3]            #Boo, vector
x[,3,drop=FALSE] #Matrixicity saved!
于 2012-05-12T11:34:59.717 に答える
4

ベクトルを と呼びましょうxmatrix(x)ort(matrix(x))を使用して、適切な (2D) 行列に変換してみてください。

于 2012-05-12T10:18:01.893 に答える