私は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を削除するにはどうすればよいですか?
matrix
のデフォルトは1列です。明示的に0列を持つためには、書く必要があります
matrix(, nrow = 15, ncol = 0)
より良い方法は、マトリックス全体を事前に割り当ててから入力することです
mat <- matrix(, nrow = 15, ncol = n.columns)
for(column in 1:n.columns){
mat[, column] <- vector
}
事前に列の数がわからない場合は、各列をリストに追加し、最後にcbind
を追加します。
List <- list()
for(i in 1:n)
{
normF <- #something
List[[i]] <- normF
}
Matrix = do.call(cbind, List)
遅いので、何かを悪い考えとして却下することに注意してください。実行にそれほど時間がかからないコードの一部である場合、速度の低下は関係ありません。次のコードを使用しました。
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秒未満で実行された問題の場合。
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]
を追加するだけです。