如何在 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。我怎样才能删除那些 NAs?

337908 次浏览

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]