R Shiny - 如何将 select 输入从 UI 传递到服务器文件中的 quo() ?

R Shiny - how can I pass a select input from UI and into quo() in server file?

我做了一个绘图函数,叫做make_figure。此函数接受我要绘制的变量的变量名等。但是函数的创建使得我在调用它时需要在变量名周围使用 quo() 。像这样:

make_figure(quo(variableName))

这很好用。

现在我想将该功能实现到 Shiny 应用程序中,但我无法找到一种方法将变量名从 UI 传递到服务器文件中的 quo() 中。

在 Shiny 服务器文件中调用的函数结构草图,如果我可以像往常一样调用它(在 Shiny 之外):

output$fig <-renderPlot({ 
 make_figure(quo(input$chosenVariable))
})

这当然行不通,因为 quo(input$chosenVariable) 只是引用 input$chosenVariable 而不是 variableName (quo(variableName)),这是我真正想要它做的。

我的 Shiny UI 文件看起来像这样:

selectInput(
 inputId = "chosenVariable"
 label = "Variable"
 choices = c("Variable Display Name" = "variableName")
)

我想将 variableName 从 choices 传递到服务器端的函数中。 我在服务器端和应用程序的 UI 端围绕 variableName 尝试了 !!、quo()、quo_get_expr() 的十几种不同组合,但均未成功。

例如我试过:

UI:

selectInput(
  inputId = "chosenVariable"
  label = "Variable"
  choices = c("Variable Display Name" = quo_get_expr(quo(quo(variableName)))
)

服务器:

output$fig <-renderPlot({ 
 make_figure(input$chosenVariable))
})

理由是 quo_get_expr(quo(quo(variableName))) returns quo(variableName)。但是,在 selectInput 的选择中不允许使用此表达式。

我该如何解决?

记住我的 make_figure 函数是为了让我需要将 quo(variableName) 传递给它。

按照 TimTeaFan 的建议,更改 make_figure 使其接受普通变量名听起来是最明智的。

我发现在函数内部将变量转换为所需的“现状格式”可以通过在函数开头放置几行来完成:

make_figure <- function(variableName){

     variableName <- sym({{noquote(variableName)}})
     variableName <- quo({{variableName}})

     (...Excluded: Addional code that now can make use
     of the the variable that now had the needed "quo format"...)

}

可能是一种更简洁的方法(如果您知道,请发表评论),但至少这是可行的。