在这个例子中,bquote在函数中使用mgcv :: gam做了什么

时间:2017-08-29 10:53:48

标签: r mgcv

在以下函数中我必须在拟合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-help说“bquote引用它的论点,除了包含在。()中的术语在指定的where环境中计算。用法bquote(expr,where = parent.frame())。”这里的环境是什么(parent.frame = plot_model环境?)以及在没有bquote(通过调用gam创建的环境?)的情况下评估它的环境是什么?

1 个答案:

答案 0 :(得分:0)

.(X)x替换为mgcv::gam(mean ~ s(bla) + bla2, data = list(bla = c(-0.147370861075094, <...>) 的值。因此,实际评估的是:

plot.gam

此错误会弹出,因为x要求在全局环境中查找符号plot_model而不是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> 进行调试时:

D/Answers: Logged custom event: {eventName:"ASSA", customAttributes:{"isEndpointSetUpComplete_true":" - success: true"}}
D/Answers: Sending 1 analytics files to https://e.crashlytics.com/spi/v2/events
D/Answers: Response code for analytics file send is 200