我正在尝试在数据框中的两列上滚动应用

library(xts)
library("dLagM")

data(warming)
fdlm1 <- function(){
model.ardl = ardlDlm(x = warming$NoMotorVehicles, y = warming$Warming, p = 1 , q = 1 , show.summary = FALSE)

fc <- ardlDlmForecast(model = model.ardl , x = tail(x,1) , h =1)$forecasts
fc
return(fc)}

dcalc1 <- rollapply(warming,18,fdlm1)


但是得到一个错误:

Error in FUN(data[posns], ...) : unused argument (data[posns])


感谢您指出我做错的任何帮助。

最佳答案

默认情况下,rollapply分别在数据的每一列上调用该函数。如果您希望函数可以访问多个列,则需要设置by.column = FALSE

dcalc1 <- rollapply(warming, 18, fdlm1, by.column = FALSE)




这个简单的例子起作用:

data(sample_matrix)
x <- as.xts(sample_matrix)
r <- rollapply(x, 40, function(d) coef(lm(Close ~ Open, data=d)), by.column=FALSE)


如果您仍然有问题,那么我将解决您的函数遇到的两个问题:


您应该通过参数而不是参数将对象传递给函数
依靠作用域来找到它们,以及
x中的tail(x, 1)没有在函数范围中定义...因此很难说R在哪里找到x的值。

08-19 22:28