require(quantmod)
require(TTR)
iris2 <- iris[1:4]
b=NULL
for (i in 1:ncol(iris2)){
for (j in 1:ncol(iris2)){
a<- runCor(iris2[,i],iris2[,j],n=21)
b<-cbind(b,a)}}
データフレーム内の異なる列のローリング相関を計算し、そのデータを列で別々に保存したいと考えています。上のコードは変数bにデータを格納していますが、すべての結果をダンプするだけでは役に立ちません。私が望むのは、各iに対して異なるデータフレームを作成できることです。forループのデータをforループの内部に格納する方法は?
この場合、私が最終的に望むのは、4つのデータフレームです。各データフレームには、ローリング相関を示す4つの列、つまりdf1 = col1のcol1とcol1,2,3,4、df2 =コル2の対col 1,2,3,4 ...など)
私はlapplyまたはrollapplyを使用すると考えましたが、同じ問題が発生しました。
d=NULL
for (i in 1:ncol(iris2))
for (j in 1:ncol(iris2))
{c<-rollapply(iris2, 21 ,function(x) cor(x[,i],x[,j]), by.column=FALSE)
d<-cbind(d,c)}
本当に入力がありますか。
インデックスベクトルに 'foreach'ループまたは' mapply'を試してみてください。それはあなたにDFのリストのリストを与えるでしょう。 'i'で' j'、次に 'c&d'で入れ子にします – Adam
forループでcbindを使用することは決してお勧めできません。余分にメモリにコピーされないようにするには、あらかじめ定義された長さのリストを使用する方がはるかに良い方法です。 –