gamm的R粘贴公式

R paste formula for gamm

我正在尝试以编程方式创建 gamm 估计公式,稍后我想在闪亮的应用程序中使用它。我的目标是创建一个这样的公式: y~s(x, bs="cs") 。 我卡住了,因为我不知道如何粘贴逗号后的部分:bs="cs".

input<-list()
input$x<-"mpg"
input$y<- "hp"

 formula<-as.formula(paste(input$y_variable," ~ ",paste(paste("s(",paste(input$x_variable,collapse="+")),', bs="cs")')))

z <- mgcv::gamm(formula, data=mtcars)

如果在一行中输入多个命令开始扰乱您对代码的理解,将它们分解通常是有意义的:

dep_vars    <- paste0(input$x, collapse = "+")
after_tilde <- paste0("s(", dep_vars, ", bs = 'cs')")
dyn_string  <- paste0(input$y, " ~ ", after_tilde)

mgcv::gamm(as.formula(dyn_string), data=mtcars)

然而,事实证明,实际问题是您定义了 input$xinput$y,但您在创建公式时使用了 input$x_variableinput_y_variable

我通常建议不要为此走角色路线。通常最好在语言上计算:

input <- lapply(input, as.name)
z <- eval(substitute(mgcv::gamm(y ~ s(x, bs = "cs"), data=mtcars), input))

这会将表达式中的 xy 替换为 input 中的名称并对表达式求值。