簡體   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