在带有反应数据集的 Shiny 中使用带有 dplyr 的输入变量时出现问题

Trouble using inputted variable with dplyr in Shiny with a reactive dataset

我浏览了有关 plyr 和 dplyr 问题的其他答案,但没有成功。

我想在 dplyr "group_by_" 和 "summarise" 命令中使用两个输入变量。我似乎找不到正确的语法来将我的变量输入到 summarize 中以获得分组的平均值。将其转回数据框不起作用。

new_frame <- frame() 
new_frame[[input$ycol]]

sapply 给出了一个结果,但它忽略了分组级别并给出了整列的平均值。

mean = sapply(frame()[input$ycol],mean)

我不确定要使用哪些其他选项。

MWE错误如下。

library(shiny)
ui <- fluidPage(

   titlePanel("MWE using faithful data"),
   sidebarLayout(
      sidebarPanel(
        selectInput('xcol', 'X Variable', "",choices = "colour"),
        selectInput('ycol', 'Y Variable', "",choices = c("waiting", "eruptions"))),

      mainPanel(
         tableOutput("distPlot"))))

server <- function(input, output) {

  frame <- reactive({

    faithful <- faithful %>% mutate(colour = rep(c("red","white"),136))
    return(faithful)
  })

   output$distPlot <- renderTable({
     frame() %>% group_by_(input$xcol) %>% 
       summarise(mean = mean(input$ycol))
   })
}
shinyApp(ui = ui, server = server)

如果我对行进行硬编码

summarise(mean = mean(input$ycol))

summarise(mean = mean(eruptions))

用summarise_也不行。

它给了我想要的东西,但这不是我实际代码中的一个选项。任何帮助将不胜感激。

谢谢

主要问题是我们如何评估 input$xcolinput$ycol。这些是字符串元素。一种选择是使用 rlang::sym 将其转换为符号并使用 !!

进行评估
library(shiny)
library(dplyr)
ui <- fluidPage(

  titlePanel("MWE using faithful data"),
  sidebarLayout(
    sidebarPanel(
      selectInput('xcol', 'X Variable', "",choices = "colour"),
      selectInput('ycol', 'Y Variable', "",choices = c("waiting", "eruptions"))),

    mainPanel(
      tableOutput("distPlot"))))

server <- function(input, output) {

  frame <- reactive({

  faithful %>%
           mutate(colour = rep(c("red","white"),136))

  })

  output$distPlot <- renderTable({
       frame() %>%
            group_by(!! rlang::sym(input$xcol)) %>% 
            summarise(mean = mean(!! rlang::sym(input$ycol)))
  })
}
shinyApp(ui = ui, server = server)

-输出