0
在下面的函數我一定要使用擬合GAM模型,以避免錯誤什麼在這個例子中使用mgcv :: GAM(bquote做一個功能
錯誤EVAL當bquote功能EXPR, envir,enclos):object'x'not found
當調用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引用它的參數,除了包在條款。()中指定的,其中環境。用法bquote被評估(表達式,其中= parent.frame())」。什麼是這裏的環境(parent.frame = plot_model環境?)以及在沒有bquote(通過gam調用創建的環境?)的情況下評估哪些環境?
但即使使用bquote x不是在全球環境中,是什麼呢? – tover
與'plot.gam'不同,'bquote'在**當前**環境中尋找'x',即'plot_model(x = bla)'。您將'bla'作爲參數'x'傳遞給'plot_model',所以'x'只能從該環境內(及其下行)訪問。但是,正如你在我的例子中看到的那樣,當你用'bquote'使用表達式'。(x)'時,符號'x'被替換爲它的值。 –
但是,這是如何解釋當使用bquote調用gam時,plot.gam找到x? gam會在沒有bquote的情況下工作,它的情節只適用於bquote。爲什麼在用bquote估計gam後,x突然出現在圖上? – tover