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? (корреляция качения в r)
В этом случае, поскольку у меня есть 4 столбца, в конечном итоге я хочу, чтобы 4 кадра данных, каждая из которых содержала 4 столбца, показывающие скользящие корреляции, то есть df1 = corr col 1 vs col 1,2,3,4, 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' – Adam
. Никогда не рекомендуется использовать cbind в цикле for. Гораздо лучше использовать список с предопределенной длиной, чтобы избежать чрезмерного копирования в памяти. –