如何在 r 中重新制定其他功能

How to use other function in reformulate in r

我正在尝试在 gam() 中使用 reformulate(),但遇到了问题。

我的模型是这样的:

g <- mgcv::gam(mpg ~ s(hp) + am + qsec, data = mtcars)

然后我用reformulate()重写公式却报错:

g2 <- mgcv::gam(reformulate(c(s('hp'),'am','qsec'), response = 'mpg'), data = mtcars)

我认为reformulate()中的参数不能使用函数(在我的例子中我使用s()),然后我删除s()和代码运行:

g3 <- mgcv::gam(reformulate(c('hp','am','qsec'), response = 'mpg'), data = mtcars)

我的问题是如何使用 reformulate() 中的函数或提出一些其他替代方案。

非常感谢任何帮助!

在这种情况下,您可以创建一个字符串对象并将其转换为公式。

reponse = 'mpg'
terms <- c('s(hp)',  'am',  'qsec')

g <- mgcv::gam(as.formula(sprintf('%s~%s', reponse, 
               paste(terms, collapse = '+'))), data = mtcars)
g

#Family: gaussian 
#Link function: identity 

#Formula:
#mpg ~ s(hp) + am + qsec

#Estimated degrees of freedom:
#2.36  total = 5.36 

#GCV score: 8.837538     

哪里

paste(terms, collapse = '+') #returns
#[1] "s(hp)+am+qsec"
#and
sprintf('%s~%s', reponse, paste(terms, collapse = '+')) #returns
#[1] "mpg~s(hp)+am+qsec"