我在这里有嵌套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
}
任何想法如何解决?
答案 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