繁体   English   中英

在本例中bquote在函数中使用mgcv :: gam做了什么

[英]What does bquote do in this example using mgcv::gam in a function

在以下函数中,在拟合gam模型时必须使用bquote函数以避免错误

eval(expr,envir,enclos)中的错误:找不到对象“ x”

当plot.gam被调用时。 由于要绘制的因子变量而发生错误。 但是我真的不明白bquote在这里做什么以及为什么需要它。

library(mgcv)
plot_model <- function(x){
  # agam <- gam(mean ~ s(bla) + bla2, data=x)
  agam <- eval(bquote(mgcv::gam(mean ~ s(bla) + bla2, data=.(x))))
  plot(agam, pages=1, all.terms = TRUE)
}
bla <- data.frame(bla=rnorm(20), bla2=sample(letters[1:4], size=20, replace=T), 
                  mean=sample(20))

plot_model(bla)

R帮助说:“ bquote用引号引起来,除了用。()包装的术语在指定的where环境中进行评估。用法bquote(expr,where = parent.frame())。” 这里的环境是什么(parent.frame = plot_model环境?),并且在没有bquote的情况下(通过gam调用创建的环境?)将在哪个环境中进行评估?

bquote将表达式.(X)替换为x的值。 因此,实际评估的是:

mgcv::gam(mean ~ s(bla) + bla2, data = list(bla = c(-0.147370861075094, <...>)

出现此错误是因为plot.gam要求在全局环境而不是plot_model环境中寻找符号x

使用recover调试时:

<...>
3: plot.gam(agam, pages = 1, all.terms = TRUE)
4: termplot(x, se = se, rug = rug, col.se = 1, col.term = 1, main = attr(x$pterms, "term.
5: eval(model$call$data, envir)
<...>
Browse[1]> envir
<environment: R_GlobalEnv>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM