![](/img/trans.png)
[英]Using update() function in conjunction with gam() in new mgcv package
[英]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.