【问题标题】:R - object formula not found inside a functionR - 在函数中找不到对象公式
【发布时间】:2019-10-21 13:36:29
【问题描述】:

我创建了一个函数来使用 dynlm 包滚动应用指数加权最小二乘。代码如下:

residualization<-function(df,formula_ref, size){
  rollapply(df,
            width=size,
            FUN = ewma_regression,
            formula_ref = formula_ref,
            by.column=FALSE, align="right")
}

ewma_regression<-function(x,formula_ref) {
    n<-nrow(x)
    weights <- 0.06*0.94^(seq(n-1,0,by=-1))
    t <- dynlm(formula=as.formula(formula_ref), data = as.zoo(x),weights = weights)
    return(t$residuals) 
}

但是,当我在我的数据集上运行此代码时,它显示了问题:

Error in as.formula(formula_ref) : object 'formula_ref' not found

当我尝试调试它时,在函数的环境中,变量 formula_ref 确实存在!但是,即使在调试模式下,即使我尝试将 formula_ref 设置为临时公式对象,我也无法运行 dynlm 回归。

谁能帮帮我?我知道这可能是一个愚蠢的错误,但我找不到!

一个可重现的例子是:

dates<-seq.Date(from=as.Date("2010-01-01"), length.out = 1000, by="day")
teste1<-data.frame(x=rnorm(1000),y=rnorm(1000)*5) 
teste2<-xts(teste1,order.by = dates)

formula.test<- y ~ x + I(x^2)

teste3<-residualization(df=teste2,formula_ref = formula.test, size=100)

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以将 y ~ x + I(x^2) 括在引号中 ("y ~ x + I(x^2)")。

    【讨论】:

    • 谢谢!有效!如果我删除 as.formula() 函数,它仍然会给出错误(我之前尝试过),但是用引号括起来就可以了,谢谢!
    • 啊,是的,这是我的错误。考虑help(as.formula) 中关于环境的解释。我猜错误就在这里。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 2018-01-06
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 2021-07-04
    相关资源
    最近更新 更多