Добавить строку в виде формулы с определенной функцией - PullRequest
1 голос
/ 22 февраля 2020

Я хочу определить функцию, когда я введу строку как ковариату, функция поместит мою строку в указанное c местоположение и преобразует ее в формулу. Я знаю, что мой код неверен, но я не знаю, как его написать.

То, что я хочу, это когда я набираю 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)

Ответы [ 2 ]

4 голосов
/ 22 февраля 2020

Вы ищете это, не уверены, но попробуйте это 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))
}

Также мы можем сделать его гибким, предоставляя параметры для ввода, такие как имя целевой переменной и т. Д. c.

, например, другая версия может быть:

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)"

3 голосов
/ 22 февраля 2020

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)
}
...