从R中的双for循环打印对象

时间:2011-07-26 05:17:03

标签: r loops printing for-loop

我在这里有嵌套for循环的代码。我想要接收的输出是由嵌套循环产生的矩阵列的平均值矩阵。因此,内部循环应该运行1000个随机向量的模拟,并且每次运行一个函数。这个工作正常,并将输出吐出到R.但我想将嵌套循环的输出保存到一个对象(一个1000行和11列的矩阵),然后只打印该矩阵的colMeans,由外循环执行。

我认为问题在于我将内循环的结果分配给obj矩阵的步骤。我已经尝试了对obj [i,],obj [i],obj [[i]]等的每个变化都没有成功。 R告诉我它只是一个维度的对象。

x=ACexp

obj=matrix(nrow=1000,ncol=11,byrow=T)          #create an empty matrix to dump results into
for(i in 1:ncol(x)){                           #nested for loops    
  a=rep(1,times=i)                             #repeat 1 for 1:# columns in x    
  b=rep(0,times=(ncol(x)-length(a)))           #have the rest of the vector be 0    
  Inv=append(a,b)                              #append these two for the Inv vector    
  for (i in 1:1000){                         #run this vector through the simulations    
      Inv2=sample(Inv,replace=FALSE)           #randomize interactions    
      temp2=rbind(x,Inv2)    
      obj[i]<-property(temp2)                   #print results to obj matrix     
  }    
print.table(colMeans(obj))                   #get colMeans and print to excel file    
}

任何想法如何解决?

2 个答案:

答案 0 :(得分:1)

您在修改时会反复将整个矩阵打印到屏幕上,但您的评论会显示“打印到Excel文件”。我猜你真的想把你的数据保存到文件中。一起删除print.table命令,并在完成循环后使用write.table()

write.table(colMeans(obj), 'myNewMatrixFile.csv', quote = FALSE, sep = ',', row.names = FALSE)

(我的首选选项...请参阅?write.table以选择您喜欢的选项)

答案 1 :(得分:0)

由于您的代码不可复制,我们无法确切地说出您想要的内容。但是,我想该属性返回的是您想要放置在obj矩阵的右侧行/列位置的单个数字,您可以将其称为obj[row,col]。但是你会遇到麻烦,因为你的循环都使用相同的索引i。也许这样的事情对你有用。

obj <- matrix(nrow=1000,ncol=11,byrow=T)       #create an empty matrix to dump results into
for(i in 1:ncol(x)){                           #nested for loops    
  Inv <- rep(c(1,0), times=c(i, ncol(x)-i))    #repeat 1 for 1:# columns in x, then 0's   
  for (j in 1:nrow(obj)){                      #run this vector through the simulations    
      Inv2 <- sample(Inv,replace=FALSE)        #randomize interactions    
      temp2 <- rbind(x,Inv2)    
      obj[j,i] <- property(temp2)              #save results in obj matrix     
  }    
}
write.csv(colMeans(obj), 'myFile.csv')         #get colMeans and print to csv file