如何在 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"
我正在尝试在 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"