我目前正在构建我的第一个RShiny应用程序,并且正在使用tidyverse和ggplot。我有一段代码用于绘制图表,并且正在尝试使用switch语句根据用户输入选择要绘制的变量。例如:
library(shiny)
library(tidyverse)
ui <- fluidPage(
titlePanel("Title"),
sidebarLayout(
sidebarPanel(
selectInput("catVar",
label = "Categories:",
choices = c("choice 1",
"choice 2",
"choice 3",
"choice 4",
"choice 5"),
selected = "choice 1")),
mainPanel(
plotOutput("barChart")
)
)
)
server <- function(input, output) {
output$barChart <- renderPlot({
xData <- switch(input$catVar,
"choice 1" = var1,
"choice 2" = var2,
"choice 3" = var3,
"choice 4" = var4)
chart <-
tibble %>%
group_by(xData) %>%
ggplot(aes(xData)) +
geom_bar(fill = "black") +
ylab("Count") +
xlab(input$catVar) +
coord_flip()
print(chart)
})
}
shinyApp(ui, server)
但是,当我运行该应用程序时,它报告“错误:找不到对象'var1'”。有没有另一种方法可以在switch语句中写入小标题列的名称,以便ggplot中的xData替换起作用?
答案 0 :(得分:0)
var1
到var4
不会在代码的任何地方创建,因此R不知道您在说什么。我过去能够使它起作用的方式是将您的输入更改为selectInput('catVar', 'Categories:', choices=c('var1', 'var2', 'var3', 'var4'))
,然后将您的case语句更改为xData <- rlang::syms(input$catVar)
。当然,这需要您安装rlang
软件包。完成后,还将groupBy(xData)
更改为groupBy(!!!xData)
。您的代码现在应该可以正常工作了。