is.data.frame(data)中的错误:找不到对象'data =''

问题描述:

我对r很崭新,并在努力编写一个函数:我试图制作一个适合GAM的函数。我发现了一个线性模型的例子,它工作得很好。但是,尝试为GAM使用相同的结构会引发错误。is.data.frame(data)中的错误:找不到对象'data =''

线性模型:

library(mgcv) 
library(ggplot2) 
theme_set(theme_bw()) 
set.seed(100) 
dd <- data.frame(x=1:100,y=round(rnorm(100,mean=100),1), z=round(runif(100,1,4),1)) 
lm(y~x, weights=z, data=dd)$call 
lm(formula = y ~ x, data = dd, weights = z) 

f2 <- function(f,w,d){ 
    do.call("lm", list(formula=as.formula(f), weights=as.name(w), data=as.name(d))) 
} 
f2("y~x", "z", "dd")$call 
lm(formula = y ~ x, data = dd, weights = z) 

和GAM版本

set.seed(100) 
dd <- data.frame(x=1:100,y=round(rnorm(100,mean=100),1)) 
gam(y ~ s(x, k=64, bs='ad'), data = dd, method = 'REML', select = 'TRUE')$call 
gam(formula = y ~ s(x, k=64, bs='ad'), data = dd, method = 'REML', select = 'TRUE') 

f2 <- function(f,m,s,d){ 
    do.call("gam", list(formula=as.formula(f),method=as.name(m),select=as.name(s),data=as.name(d))) 
    } 

f2("y ~ s(x, k=64, bs='ad')", "method = 'REML'", "select = 'TRUE'", "data = dd")$call 

# Error in is.data.frame(data) : object 'data = dd' not found occurs 

gam(formula = y ~ s(x, k = 64, bs = "ad"), data = dd) 
+1

WH在'gam'函数中,什么包? – PoGibas

+0

为什么不只是'do.call(“gam”,list(formula = as.formula(f),method = m,select = s,data = d))'和'f2(“y〜s(x,k = 64,bs ='ad')“,'REML',TRUE,dd)'? – r2evans

+0

对不起,我刚添加了这个包。 GAM是一个广义的加法模型。在我的情况下,我有一个散点图,GAM平滑了y值,所以我可以看到x和y之间的关系,这是非线性的。 –

电话:

f2 <- function(f, m, s, d){ 
    do.call("gam", list(formula=as.formula(f),method = "REML",select = s, data = as.name(d))) 
} 
f2("y ~ s(x, k=64, bs='ad')", "REML", TRUE, d = "dd")$call 

结果:

gam(formula = y ~ s(x, k = 64, bs = "ad"), data = dd, method = "REML", 
    select = TRUE) 
+0

很酷,谢谢!另一个(可能是大量愚蠢的问题):我如何返回结果,以便我可以使用它我的代码? –