2017-08-28 104 views
2

我想編寫一個函數,用因子變量估計gam並繪製所有變量(包括因子變量)的結果。但mgcv-package的繪圖函數會引發錯誤。爲什麼會發生此錯誤,我該如何解決?從mgcv的plot.gam與函數內的all.terms = TRUE

library(mgcv) 
plot_model <- function(x){ 
    agam <- gam(mean ~ s(bla) + bla2, data=x) 
    plot(agam, pages=1, all.terms = TRUE) 
    # here Error in eval(expr, envir, enclos) : object 'x' not found 
} 
bla <- data.frame(bla=rnorm(20), bla2=sample(letters[1:4], size=20, replace=T), 
        mean=sample(20)) 
plot_model(bla) 
# Error in eval(expr, envir, enclos) : object 'x' not found 

回答

1

顯然,x需要在局部環境中聲明,這樣plot.gam可以使用它的情節。你可以使它的工作如下:

library(mgcv) 
plot_model <- function(y){ 
    data <- y 
    agam <- mgcv::gam(mean ~ s(bla) + bla2, data=data) 
    mgcv::plot.gam(x = agam, pages=1, all.terms = TRUE) 
    # here Error in eval(expr, envir, enclos) : object 'x' not found 
} 
dat <- data.frame(bla=rnorm(20), bla2=sample(letters[1:4], size=20, replace=T), 
        mean=sample(20)) 
plot_model(dat) 
+0

它的作品,如果我調用數據集的數據,但它不起作用,如果我稱之爲x或x2。任何想法爲什麼它是這樣的?如果我將它稱爲數據,那麼當我省略第一行時(數據<-y),它也可以工作。 – tover

+1

這顯然只是因素協變量的失敗。奇怪... –

+1

mgcv不強制字符的因素。您需要爲它提供因子變量。另外,我可能會用'agam < - eval(bquote(mgcv :: gam(mean〜s(bla)+ bla2,data =。(y))))'。 – Roland