2011-07-26 7 views
1

ここにはforループのコードがあります。私が受け取りたい出力は、ネストされたループによって生成された行列の列の平均の行列です。したがって、内部ループは無作為化ベクトルの1000回のシミュレーションを実行し、毎回関数を実行する必要があります。これは単独でうまく動作し、出力をRに吐き出しますが、ネストしたループの出力をオブジェクト(1000行と11列の行列)に保存し、その行列のcolMeansのみを出力します。外側ループによって実行される。二重forループからのオブジェクトの印刷R

私は問題が私がobj行列に内部ループの結果を割り当てるステップにあると思う。私はobj [i、]、obj [i]、obj [[i]]などのすべてのバリエーションを成功裏に試しました。 Rはそれが1つの次元だけのオブジェクトであると私に伝えます。

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  
} 

これはどのように修正できますか?

答えて

1

マトリクス全体が画面に繰り返し印刷されますが、「print to excel file」というコメントが表示されます。私はあなたが実際にあなたのデータをファイルに保存したいと思っています。 (参照...私の好みのオプション?はwrite.tableあなたが好きなものを選択する))(

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

をすべて一緒print.tableコマンドを削除し、あなたのループが完了した後の使用はwrite.table

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