【发布时间】:2021-04-20 18:56:22
【问题描述】:
我制作了一个绘图函数,名为 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")
)
我想将选项中的变量名传递给服务器端的函数。 我已经在服务器端和应用程序的 UI 端尝试了十几种不同的 !!、quo()、quo_get_expr() 组合,但均未成功。
例如我试过:
用户界面:
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))) 返回 quo(variableName)。但是在 selectInput 中的选择中不允许使用此表达式。
我该如何解决这个问题?
请记住,我的 make_figure 函数是创建的,因此我需要将 quo(variableName) 传递给它。
【问题讨论】:
-
请发MRE,以便有人可以帮助您。
-
我宁愿更改
make_figure(),使其接受裸名(例如xvar)或字符串(例如"xvar")。两者都不是问题,调用函数也更容易,因为你不需要每次都使用quo()。 -
尝试使用
!!sym(input$...)而不是quo()。