R 如何使用lappy在数据的滑动窗口上循环?
如何使用R 如何使用lappy在数据的滑动窗口上循环?,r,R,如何使用lappy()在多列数据集上“循环”并应用函数?通常,我会使用rollappy(),但出于不值得深入分析的原因,在这种情况下,只有lappy()。我知道如何在扩展窗口上运行函数。但是lappy()如何与滑动窗口一起使用呢?例如,这里有一个手动更改范围的玩具示例,它与一个函数一起工作,我将为多列数据集(dat1)调用该函数: set.seed(78) dat1test.a事实上,可以用rollapply这样做: library(zoo) res <- t(rollapply(t(d
lappy()
在多列数据集上“循环”并应用函数?通常,我会使用rollappy()
,但出于不值得深入分析的原因,在这种情况下,只有lappy()
。我知道如何在扩展窗口上运行函数。但是lappy()
如何与滑动窗口一起使用呢?例如,这里有一个手动更改范围的玩具示例,它与一个函数一起工作,我将为多列数据集(dat1
)调用该函数:
set.seed(78)
dat1test.a事实上,可以用rollapply
这样做:
library(zoo)
res <- t(rollapply(t(dat1), 10, function(x) my_fun(t(x)), by.column = FALSE))
# verify that res[, i] equals test.i for i = 1,2,3
all.equal(res[, 1], test.1)
## [1] TRUE
all.equal(res[, 2], test.2)
## [1] TRUE
all.equal(res[, 3], test.3)
## [1] TRUE
图书馆(动物园)
res请查看并为my_fun
提供一个特定的函数,为dat
提供一个值,以捕获问题的本质。使用示例数据编辑Eric,这基本上就是我正在寻找的解决方案--谢谢。既然你已经给出了答案,这是显而易见的。显然,我在这里有点大脑紧锁。顺便说一句,G.Grothendieck的代码也可以工作,但不适用于这种特定情况,这是因为我使用的函数有些独特。
test.a <-lapply(seq(10, 12), function(x) my_fun(dat1[1:x]))
test.a <-lapply(seq(1, 3), function(x) my_fun(dat1[x:(x+9)]))
library(zoo)
res <- t(rollapply(t(dat1), 10, function(x) my_fun(t(x)), by.column = FALSE))
# verify that res[, i] equals test.i for i = 1,2,3
all.equal(res[, 1], test.1)
## [1] TRUE
all.equal(res[, 2], test.2)
## [1] TRUE
all.equal(res[, 3], test.3)
## [1] TRUE