我在此处包括可复制的示例。我希望用户选择一个变量,该变量将作为参数传递给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)```
答案 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)