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"...)
}
可能是一种更简洁的方法(如果您知道,请发表评论),但至少这是可行的。
我做了一个绘图函数,叫做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"...)
}
可能是一种更简洁的方法(如果您知道,请发表评论),但至少这是可行的。