Как создать пустую матрицу в 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?
Ответы
Ответ 1
По умолчанию для matrix
должно быть 1 столбец. Чтобы явно иметь 0 столбцов, вам нужно написать
matrix(, nrow = 15, ncol = 0)
Лучше всего было бы перераспределить всю матрицу, а затем заполнить ее в
mat <- matrix(, nrow = 15, ncol = n.columns)
for(column in 1:n.columns){
mat[, column] <- vector
}
Ответ 2
Если вы не знаете количество столбцов раньше времени, добавьте каждый столбец в список и cbind
в конце.
List <- list()
for(i in 1:n)
{
normF <- #something
List[[i]] <- normF
}
Matrix = do.call(cbind, List)
Ответ 3
Я был бы осторожен, так как отбрасывал что-то как плохую идею, потому что это медленно. Если это часть кода, для выполнения которой не требуется много времени, то медлительность не имеет значения. Я просто использовал следующий код:
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 секунду.
Ответ 4
Чтобы избавиться от первого столбца 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
Таким образом, вы можете просто добавить output = output[,-1]
после цикла for в исходный код.