【发布时间】:2016-11-25 04:07:19
【问题描述】:
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 创建不同的数据框。
在这种情况下,由于我有 4 列,我最终想要的是 4 个数据帧,每个数据帧包含 4 列显示滚动相关性,即 df1 = col 1 与 col 1、2、3、4 的 corr,df2 = corr col 2 vs 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 -
在 for 循环中使用 cbind 绝不是一个好主意。使用具有预定义长度的列表以避免在内存中过度复制是更好的做法。