web-dev-qa-db-ja.com

Rで空の行列を作成する方法は?

私はRが初めてです。forを使用して、cbindループの結果で空のマトリックスを埋めたいです。私の質問は、どうすればマトリックスの最初の列のNAを削除できるかです。以下にコードを含めます。

output<-matrix(,15,) ##generate an empty matrix with 15 rows, the first column already filled with NAs, is there any way to leave the first column empty?

for(`enter code here`){
normF<-`enter code here`
output<-cbind(output,normF)
}

出力は、予想したマトリックスです。唯一の問題は、最初の列がNAで満たされていることです。これらのNAを削除するにはどうすればよいですか?

56
user3276582

matrixのデフォルトは1列です。明示的に0列を持つためには、書く必要があります

matrix(, nrow = 15, ncol = 0)

より良い方法は、マトリックス全体を事前に割り当ててから入力することです

mat <- matrix(, nrow = 15, ncol = n.columns)
for(column in 1:n.columns){
  mat[, column] <- vector
}
77

事前に列の数がわからない場合は、各列をリストに追加し、最後にcbindを追加します。

List <- list()
for(i in 1:n)
{
    normF <- #something
    List[[i]] <- normF
}
Matrix = do.call(cbind, List)
17
Señor O

遅いので、何かを悪い考えとして却下することに注意してください。実行にそれほど時間がかからないコードの一部である場合、速度の低下は関係ありません。次のコードを使用しました。

for (ic in 1:(dim(centroid)[2]))
{
cluster[[ic]]=matrix(,nrow=2,ncol=0)
}
# code to identify cluster=pindex[ip] to which to add the point
if(pdist[ip]>-1)
{
cluster[[pindex[ip]]]=cbind(cluster[[pindex[ip]]],points[,ip])
}

1秒未満で実行された問題の場合。

6
Jonathan Harris

NAの最初の列を削除するには、負のインデックス(Rデータセットからインデックスを削除)を使用します。例えば:

output = matrix(1:6, 2, 3) # gives you a 2 x 3 matrix filled with the numbers 1 to 6

# output = 
#           [,1] [,2] [,3]
#     [1,]    1    3    5
#     [2,]    2    4    6

output = output[,-1] # this removes column 1 for all rows

# output = 
#           [,1] [,2]
#     [1,]    3    5
#     [2,]    4    6

したがって、元のコードのforループの後にoutput = output[,-1]を追加するだけです。

0
Sheldon