添加一个字符串作为具有定义函数的公式
Add a string as a formula with defined function
我想定义一个函数,当我输入一个字符串作为协变量时,该函数会将我的字符串放在特定位置并将其转换为公式。我知道我的代码不正确,但我不知道如何编写。
我想要的是,当我键入 covars <- "+s(time,bs= 'cr',fx=TRUE,k=7)"
时,该函数会将 covars
添加到公式中,如下所示 gam.model <- gam(cvd ~ pm10 +s(time,bs= 'cr',fx=TRUE,k=7), data = chicagoNMMAPS , family =poisson, na.rm=T)
library(dlnm) # use chicagoNMMAPS data
library(mgcv)
# define myfun
myfun <- function(covars){
covars <- covars
gam.model <- gam(cvd ~ pm10 + covars, data = chicagoNMMAPS , family =poisson, na.rm=T)
summary(gam.model)
}
myfun("+s(time,bs= 'cr',fx=TRUE,k=7)")
myfun 应该这样做:
gam.model <- gam(cvd ~ pm10 + covars, data = chicagoNMMAPS , family =poisson, na.rm=T)
你在找这个吗,不确定,但试试 as.formula
和 paste0
:
myfunc_formula <- function(covars){
return(as.formula(paste0('cvd ~ pm10 ', covars)))
}
我们稍后可以将此输入用于 gam(myfunc_formula(covars), data = chicagoNMMAPS , family =poisson, na.rm=T)
、
## In case someone wants to return the summary of given gam model
myfunc_formula_v1 <- function(covars){
gam1 <- gam(as.formula(paste0('cvd ~ pm10 ', covars)), data = chicagoNMMAPS , family =poisson, na.rm=TRUE)
return(summary(gam1))
}
我们还可以通过为目标变量名称等输入提供参数来使其灵活
例如另一个版本可以是:
myfunc_formula_v2 <- function(covars, target='cvd'){
return(as.formula(paste0(target, ' ~ pm10 ', covars)))
}
输出:
> myfunc_formula(covars)
cvd ~ pm10 + s(time, bs = "cr", fx = TRUE, k = 7)
给定 covars = "+s(time,bs= 'cr',fx=TRUE,k=7)"
paste0
有效,但 reformulate
稍微更优雅:
myfun <- function(covars){
form <- reformulate(c("pm10",covars), response="cvd")
gam.model <- gam(form, data = chicagoNMMAPS , family =poisson, na.rm=TRUE)
summary(gam.model)
}
我想定义一个函数,当我输入一个字符串作为协变量时,该函数会将我的字符串放在特定位置并将其转换为公式。我知道我的代码不正确,但我不知道如何编写。
我想要的是,当我键入 covars <- "+s(time,bs= 'cr',fx=TRUE,k=7)"
时,该函数会将 covars
添加到公式中,如下所示 gam.model <- gam(cvd ~ pm10 +s(time,bs= 'cr',fx=TRUE,k=7), data = chicagoNMMAPS , family =poisson, na.rm=T)
library(dlnm) # use chicagoNMMAPS data
library(mgcv)
# define myfun
myfun <- function(covars){
covars <- covars
gam.model <- gam(cvd ~ pm10 + covars, data = chicagoNMMAPS , family =poisson, na.rm=T)
summary(gam.model)
}
myfun("+s(time,bs= 'cr',fx=TRUE,k=7)")
myfun 应该这样做:
gam.model <- gam(cvd ~ pm10 + covars, data = chicagoNMMAPS , family =poisson, na.rm=T)
你在找这个吗,不确定,但试试 as.formula
和 paste0
:
myfunc_formula <- function(covars){
return(as.formula(paste0('cvd ~ pm10 ', covars)))
}
我们稍后可以将此输入用于 gam(myfunc_formula(covars), data = chicagoNMMAPS , family =poisson, na.rm=T)
、
## In case someone wants to return the summary of given gam model
myfunc_formula_v1 <- function(covars){
gam1 <- gam(as.formula(paste0('cvd ~ pm10 ', covars)), data = chicagoNMMAPS , family =poisson, na.rm=TRUE)
return(summary(gam1))
}
我们还可以通过为目标变量名称等输入提供参数来使其灵活
例如另一个版本可以是:
myfunc_formula_v2 <- function(covars, target='cvd'){
return(as.formula(paste0(target, ' ~ pm10 ', covars)))
}
输出:
> myfunc_formula(covars)
cvd ~ pm10 + s(time, bs = "cr", fx = TRUE, k = 7)
给定 covars = "+s(time,bs= 'cr',fx=TRUE,k=7)"
paste0
有效,但 reformulate
稍微更优雅:
myfun <- function(covars){
form <- reformulate(c("pm10",covars), response="cvd")
gam.model <- gam(form, data = chicagoNMMAPS , family =poisson, na.rm=TRUE)
summary(gam.model)
}