如何通过2个步骤在闪亮中使用用户选择的变量

时间:2019-12-13 10:27:42

标签: r shiny

我在此处包括可复制的示例。我希望用户选择一个变量,该变量将作为参数传递给group_by函数。然后,我想绘制汇总数据。当我稍后要计算图表中的同一变量时,虽然我能够找到如何引用用户输入的信息,但是我不知道该怎么做。在我的示例中,我需要找到占位符xxxxxxxxxxx的正确答案,或者也许找到其他解决方案

library(shiny)

ui <- fluidPage(



      selectInput("first","Select variable",c("cyl","gear")),




    plotOutput("distPlot")

)


server <- function(input, output) {


  data<-reactive({
  mtcars%>%group_by(!!input$first)%>%summarise(average=mean())
  })



  output$distPlot <- renderPlot({

    ggplot(data(),aes(XXXXXXXXXXXXXX,average))+
      geom_bar(stat = 'identity')
  })
}

shinyApp(ui, server)```


1 个答案:

答案 0 :(得分:1)

当您在group_by函数和ggplot的aes函数中引用input $ first时,您必须编写!!sym(input$first)

library(shiny)
library(ggplot2)

ui <- fluidPage(
  selectInput("first","Select variable",c("cyl","gear")),
  plotOutput("distPlot"),
)

server <- function(input, output) {

  data<-reactive({
    mtcars%>% 
      group_by(!!sym(input$first)) %>%
      summarise(average=mean(mpg))
  })

  output$distPlot <- renderPlot({
    ggplot(data(),aes(x=!!sym(input$first),y=average)) + 
      geom_bar(stat = 'identity')
  })
}

shinyApp(ui, server)

要了解为什么需要sym,请考虑以下事项:

library(shiny)
library(ggplot2)

ui <- fluidPage(
  selectInput("first","Select variable",c("cyl","gear")),
  tableOutput("wrong"),
  tableOutput("correct")
)

server <- function(input, output) {

  output$wrong <- renderTable({
    mtcars%>% 
      group_by(!!input$first) %>%
      summarise(average=mean(mpg))
  })

  output$correct <- renderTable({
    mtcars%>% 
      group_by(!!sym(input$first)) %>%
      summarise(average=mean(mpg))
  })

}

shinyApp(ui, server)