如何使用cbind a循环R在中创建空矩阵

如何使用cbind a循环R在中创建空矩阵,r,matrix,cbind,R,Matrix,Cbind,我想对R中每个步骤生成的矩阵进行cbind,如何在matlab中创建一个初始空矩阵,比如result=[],然后对每个迭代进行cbind?这将创建一个包含所有1的100x10矩阵。它应该让你对这些东西的一般形式有一个概念 my.matrix <- c() for(i in 1:10){ my.matrix <- cbind(my.matrix, rep(1,100)) } my.matrix这将创建一个包含所有1的100x10矩阵。它应该让你对这些东西的一般形式有一个概念

我想对R中每个步骤生成的矩阵进行cbind,如何在matlab中创建一个初始空矩阵,比如result=[],然后对每个迭代进行cbind?

这将创建一个包含所有1的100x10矩阵。它应该让你对这些东西的一般形式有一个概念

my.matrix <- c()
for(i in 1:10){
    my.matrix <- cbind(my.matrix, rep(1,100))
}

my.matrix这将创建一个包含所有1的100x10矩阵。它应该让你对这些东西的一般形式有一个概念

my.matrix <- c()
for(i in 1:10){
    my.matrix <- cbind(my.matrix, rep(1,100))
}

my.matrix在循环中使用
cbind
非常慢。如果预先知道大小,可以预先分配矩阵并填充循环中的列。否则,请使用
列表
。创建一个空列表,并将向量添加到循环中的列表中。然后,在循环完成后,将列表cbind到一个矩阵中

时间:

Preallocate matrix:
   user  system elapsed 
  1.024   0.064   1.084

Grow matrix with cbind:
   user  system elapsed 
 76.036  50.146 125.840

Preallocate list:
   user  system elapsed 
  0.788   0.040   0.823

Grow list by indexing:
   user  system elapsed 
  0.821   0.043   0.859 
代码:

预先分配矩阵。 f1=函数(x){ 种子集(2718) mat=矩阵(ncol=x,nrow=x) 对于(1:x中的i){ mat[,i]=rnorm(x) } 返回(mat) } #用cbind生长矩阵。 f2=函数(x){ 种子集(2718) mat=c() 对于(1:x中的i){ mat=cbind(mat,rnorm(x)) } 返回(mat) } #预先分配列表。 f3=功能(x){ 种子集(2718) lst=向量(“列表”,长度=x) 对于(1:x中的i){ lst[[i]]=rnorm(x) } res=do.call(cbind,lst) 返回(res) } #通过索引增加列表。 f4=功能(x){ 种子集(2718) lst=列表() 对于(1:x中的i){ lst[[i]]=rnorm(x) } res=do.call(cbind,lst) 返回(res) } x=3000
system.time(r1在循环中使用
cbind
非常慢。如果事先知道大小,可以预先分配矩阵并填充循环中的列。否则,使用
列表
。创建空列表并向循环中的列表添加向量。然后,在循环完成后,将列表cbind到矩阵中

时间:

Preallocate matrix:
   user  system elapsed 
  1.024   0.064   1.084

Grow matrix with cbind:
   user  system elapsed 
 76.036  50.146 125.840

Preallocate list:
   user  system elapsed 
  0.788   0.040   0.823

Grow list by indexing:
   user  system elapsed 
  0.821   0.043   0.859 
代码:

预先分配矩阵。 f1=函数(x){ 种子集(2718) mat=矩阵(ncol=x,nrow=x) 对于(1:x中的i){ mat[,i]=rnorm(x) } 返回(mat) } #用cbind生长矩阵。 f2=函数(x){ 种子集(2718) mat=c() 对于(1:x中的i){ mat=cbind(mat,rnorm(x)) } 返回(mat) } #预先分配列表。 f3=功能(x){ 种子集(2718) lst=向量(“列表”,长度=x) 对于(1:x中的i){ lst[[i]]=rnorm(x) } res=do.call(cbind,lst) 返回(res) } #通过索引增加列表。 f4=功能(x){ 种子集(2718) lst=列表() 对于(1:x中的i){ lst[[i]]=rnorm(x) } res=do.call(cbind,lst) 返回(res) } x=3000
system.time(r1,尽管您最好使用灵活的方法,如
sappy(1:10,函数(x)rep(x,100))
来获得相同的矩阵结果。尽管您可能最好使用灵活的方法,如
sappy(1:10,函数(x)rep(x,100))
获得相同的矩阵结果。这是一个惊人的答案@bdemarest这是一个惊人的答案@bdemarest