CVlm {DAAG}:设置 printit = FALSE 会导致问题 - 未找到对象“sumss”

E B*_*E B 5 regression r linear-regression lm cross-validation

我正在使用,CVlm {DAAG}并且我想设置,printint=FALSE因为默认值是

printit if TRUE, output is printed to the screen
Run Code Online (Sandbox Code Playgroud)

我尝试使用plotitprintitto运行该函数FALSE,但后来发现错误:sumssvariable not find

有没有办法实际设置printitplotittoFALSE因为我不想在屏幕上打印绘图或表格?

李哲源*_*李哲源 3

关于2015年9月3日更新的最新DAAG_1.22

放松,您已经发现了 的错误CVlm {DAAG}。我确信您已将printit和设置plotitFALSE,这会重现该问题。考虑以下可重现的示例:

library(DAAG)
CVlm(printit = FALSE)  ## OK, plot generated, no ANOVA table printed
CVlm(plotit = FALSE)  ## OK, ANOAV table printed, no plot generated
CVlm(printit = FALSE, plotit = FALSE)  ## Oops...
# Error in CVlm(printit = FALSE, plotit = FALSE) : object 'sumss' not found
Run Code Online (Sandbox Code Playgroud)

现在,快速扫描一下源代码就可以发现问题。局部变量sumss定义于:

if (printit | plotit) {
    sumss <- 0
    sumdf <- 0
    ## ...blablabla
    }
Run Code Online (Sandbox Code Playgroud)

即,printitplotit需要TRUE声明并初始化sumss。然而,在最后CVlm

attr(data, "ms") <- sumss/sumdf
attr(data, "df") <- sumdf
Run Code Online (Sandbox Code Playgroud)

没有if条件保护他们。因此,当您到达这些行时,您会收到“找不到变量”错误。

我不是软件包作者或维护者,所以我不热衷于解决这个问题。我只是建议你保留plotit = TRUE


我看到你的新编辑来澄清这个问题。如果您既不想绘图也不想打印,则必须CVlm自己修改函数,删除attr上面提到的两行。看起来软件包作者并不热衷于维护这个软件包,因此要求修复错误似乎很绝望。