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)
答
电话:
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
很酷,谢谢!另一个(可能是大量愚蠢的问题):我如何返回结果,以便我可以使用它我的代码? –
WH在'gam'函数中,什么包? – PoGibas
为什么不只是'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
对不起,我刚添加了这个包。 GAM是一个广义的加法模型。在我的情况下,我有一个散点图,GAM平滑了y值,所以我可以看到x和y之间的关系,这是非线性的。 –