使用开关选择RShiny中的小标题变量

时间:2018-10-01 19:53:17

标签: r ggplot2 shiny switch-statement tibble

我目前正在构建我的第一个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替换起作用?

1 个答案:

答案 0 :(得分:0)

var1var4不会在代码的任何地方创建,因此R不知道您在说什么。我过去能够使它起作用的方式是将您的输入更改为selectInput('catVar', 'Categories:', choices=c('var1', 'var2', 'var3', 'var4')),然后将您的case语句更改为xData <- rlang::syms(input$catVar)。当然,这需要您安装rlang软件包。完成后,还将groupBy(xData)更改为groupBy(!!!xData)。您的代码现在应该可以正常工作了。