我是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?
答案 0 :(得分:77)
matrix
的默认值是1列。要显式拥有0列,您需要编写
matrix(, nrow = 15, ncol = 0)
更好的方法是预先分配整个矩阵,然后将其填入
mat <- matrix(, nrow = 15, ncol = n.columns)
for(column in 1:n.columns){
mat[, column] <- vector
}
答案 1 :(得分:16)
如果您不知道提前列数,请将每列添加到列表中,并在最后添加cbind
。
List <- list()
for(i in 1:n)
{
normF <- #something
List[[i]] <- normF
}
Matrix = do.call(cbind, List)
答案 2 :(得分:6)
我会谨慎地认为某些事情是个坏主意,因为它很慢。如果它是代码的一部分,不需要花费太多时间来执行,那么缓慢是无关紧要的。我刚刚使用了以下代码:
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秒内运行的问题。
答案 3 :(得分:0)
要摆脱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]
。