如何使用lapply()
“循环”多列数据集并应用函数?通常情况下,我会使用rollapply()
,但由于在这种情况下不值得进入分析的原因仅适用于lapply()
。我知道如何在扩展窗口上运行一个函数。但是如何在滑动窗口中使用lapply()
?例如,以下是手动更改范围的玩具示例,我将为多列数据集(my_fun
)调用dat1
函数:
set.seed(78)
dat1 <- as.data.frame(matrix(rnorm(1000), ncol = 20, nrow = 50))
my_fun <-function(x) {
a <-apply(x,1,mean)
}
test.1 <-my_fun(dat1[1:10])
test.2 <-my_fun(dat1[2:11])
test.3 <-my_fun(dat1[3:12])
对扩展窗口使用lapply()也可以,即范围1:10,1:11,1:12:
test.a <-lapply(seq(10, 12), function(x) my_fun(dat1[1:x]))
我的问题:有没有办法通过上面的3个手动示例使用lapply来复制滑动窗口分析?我尝试了几种可能性,例如使用rep()和replicate(),但到目前为止还没有成功。任何见解将不胜感激。
答案 0 :(得分:1)
test.a <-lapply(seq(1, 3), function(x) my_fun(dat1[x:(x+9)]))
答案 1 :(得分:0)
事实上,可以使用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