R膏配方为gamm

时间:2017-09-21 08:59:28

标签: r paste mgcv

我正在尝试以编程方式为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)

2 个答案:

答案 0 :(得分:1)

如果在一行中输入多个命令开始弄乱您对代码的理解,通常有必要将其分解:

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

答案 1 :(得分:0)

我通常建议不要为此选择角色路线。通常情况下,计算语言会更好:

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

这将使用x中的名称替换表达式中的yinput并计算表达式。