Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中列表之间的滚动相关性_R_List_Correlation - Fatal编程技术网

R中列表之间的滚动相关性

R中列表之间的滚动相关性,r,list,correlation,R,List,Correlation,我有两个列表,listA和listB,我想使用大小为4的滚动窗口来计算它们之间的相关性 listA A B C D 1) 1 3 4 6 2) 6 9 11 1 3) 1 3 4 5 4) 8 4 5 6 5) 9 9 4 6 6) 1 5 6 6 7) 9 3 6 4 8) 6 7 8 9 listB A B C D 1) 1 3 4

我有两个列表,listA和listB,我想使用大小为4的滚动窗口来计算它们之间的相关性

listA
    A   B   C   D
1)  1   3   4   6
2)  6   9   11  1
3)  1   3   4   5
4)  8   4   5   6
5)  9   9   4   6
6)  1   5   6   6
7)  9   3   6   4
8)  6   7   8   9

listB
    A   B   C   D
1)  1   3   4   3
2)  6   9   5   7
3)  1   1   4   5
4)  7   1   5   6
5)  9   9   3   6
6)  1   5   6   6
7)  9   9   6   4
8)  5   6   4   9
具体来说,我希望使用大小为4的滚动窗口计算
cor(listA[1:4,1],listB[1:4,1])
,这意味着我将有5个值用于列a的listA和listB之间的相关性。一旦对列a进行了计算,我将对列B、C和D进行同样的计算

我以前使用“rollapplyr”实现了这一点,但我正在处理的对象是一个XTS对象,而不是两个单独的对象,这对于我简单的小大脑来说更容易理解

'result <- rollapplyr(XTSobject, 4, cor, by.column = FALSE)'

'result让我随机生成
listA
listB
并处理它们:

listA<-data.frame(matrix(rnorm(32), c(8,4)))
listB<-data.frame(matrix(rnorm(32), c(8,4)))

通过使用
apply
系列,同样可以在不循环的情况下实现。

让我随机生成
listA
listB
,并对它们进行操作:

listA<-data.frame(matrix(rnorm(32), c(8,4)))
listB<-data.frame(matrix(rnorm(32), c(8,4)))

通过使用
apply
系列,同样可以在不循环的情况下实现。

使用Lukasz Derylo答案中的数据,您还可以尝试:

set.seed(1234)
listA<-data.frame(matrix(rnorm(32), c(8,4)))
listB<-data.frame(matrix(rnorm(32), c(8,4)))
do.call(cbind, Map(function(x, y) sapply(1:5, function(z) cor(x[z:(z+3)], y[z:(z+3)])), listA, listB))
             X1         X2         X3         X4
[1,] -0.2193800  0.3119567 0.31504929  0.7475560
[2,] -0.2669925 -0.4210403 0.43135275  0.9510322
[3,] -0.5657515 -0.6421284 0.82403697  0.2723139
[4,] -0.3829411 -0.6975032 0.09799502 -0.1750354
[5,] -0.8950722 -0.2397563 0.49121024 -0.5240474
set.seed(1234)

listA使用Lukasz Derylo答案中的数据,您还可以尝试:

set.seed(1234)
listA<-data.frame(matrix(rnorm(32), c(8,4)))
listB<-data.frame(matrix(rnorm(32), c(8,4)))
do.call(cbind, Map(function(x, y) sapply(1:5, function(z) cor(x[z:(z+3)], y[z:(z+3)])), listA, listB))
             X1         X2         X3         X4
[1,] -0.2193800  0.3119567 0.31504929  0.7475560
[2,] -0.2669925 -0.4210403 0.43135275  0.9510322
[3,] -0.5657515 -0.6421284 0.82403697  0.2723139
[4,] -0.3829411 -0.6975032 0.09799502 -0.1750354
[5,] -0.8950722 -0.2397563 0.49121024 -0.5240474
set.seed(1234)

你能让listA和listB重现吗?它们是数据帧吗?你能让listA和listB重现吗?它们是数据帧吗?当处理伪随机数(如
rnorm
)时,您可以在脚本的开头添加
set.seed()
,以获得可复制的结果。感谢Lukasz,我能问一下如何使用apply实现同样的效果吗?需要嵌套的apply吗?看看Jimbou的答案。它包含nice
do.call
-
sapply
combo:)当处理伪随机数(如
rnorm
)以获得可复制的结果时,您可以始终在脚本的开头添加
set.seed()
),谢谢Lukasz,我可以问一下如何使用apply实现同样的效果,这是一个嵌套的应用程序吗?看看Jimbou的答案。它包含nice
do.call
-
sapply
combo:)
set.seed(1234)
listA<-data.frame(matrix(rnorm(32), c(8,4)))
listB<-data.frame(matrix(rnorm(32), c(8,4)))
do.call(cbind, Map(function(x, y) sapply(1:5, function(z) cor(x[z:(z+3)], y[z:(z+3)])), listA, listB))
             X1         X2         X3         X4
[1,] -0.2193800  0.3119567 0.31504929  0.7475560
[2,] -0.2669925 -0.4210403 0.43135275  0.9510322
[3,] -0.5657515 -0.6421284 0.82403697  0.2723139
[4,] -0.3829411 -0.6975032 0.09799502 -0.1750354
[5,] -0.8950722 -0.2397563 0.49121024 -0.5240474