【问题标题】:Ungroup & Select in shiny unexpected behaviour以闪亮的意外行为取消组合和选择
【发布时间】:2021-12-24 09:15:14
【问题描述】:

我有一个闪亮的应用程序,当我将输出的“un-shiny”版本的结果与 Shiny 中的 tableOutput 进行比较时,取消分组无法正常工作。我期待两者都有相同的结果。请参阅此内容以供参考:

# "un-shiny" version to compare results, not part of the app. 
# This is to match with mpg input in shiny
mtcars %>%
  select(mpg, cyl, disp,
                wt, gear) %>%
  mutate(wt = as.integer(wt),
         mpg =as.integer(mpg)) %>% 
  filter(gear >= 4 & gear <= 5) %>%
  group_by(wt,gear, mpg) %>%
  tally() %>%
  ungroup() %>%
  group_by(gear,mpg) %>%
  rename(Count= n)%>%
  mutate(summ = sum(Count),
         Percentage = round((Count/summ)*100, 2))

这给了我这个输出-

现在,在闪亮的应用程序中-

library(dplyr)
library(tidyr)
library(shiny)
  

#global.R -----


mtcars_rdpr <- mtcars %>%
  select(mpg, cyl, disp,
                wt, gear) %>%
  mutate(wt = as.integer(wt),
                mpg =as.integer(mpg)) %>% 
  filter(gear >= 4 & gear <= 5) %>%
  

#ui.R ---- 
ui <- fluidPage(
  sidebarLayout(
    mainPanel(
      
      selectInput("pickvalue", label = "Gears", colnames(mtcars_rdpr%>%
                                                          select(mpg, cyl)),
                  selected = NULL, multiple = F)),
    
    
    tableOutput("tableOut")
    
  )
)

# server.R-----
server <- function(input, output, session){
  
  
  gears <- reactive({
    
    dat <- mtcars_rdpr
    
    if (!is.null(input$pickvalue)){
      dat <- dat %>%
        group_by(wt,gear, input$pickvalue) %>%
        tally() %>%
        ungroup() %>% # when i mention specific columns in the function, I get a warning
        group_by(gear,input$pickvalue) %>%
        rename(Count= n)%>%
        mutate(summ = sum(Count),
               Percentage = round((Count/summ)*100, 2))
    } 
    
    #dat <- dat %>% select(-input$pickvalue) # this gives a warning
    
    return(dat)
    
  })
  
  output$tableOut<- renderTable({gears()})
  
}

shinyApp(ui = ui, server=server)

如果有人能向我解释为什么两者之间的结果不匹配,我将不胜感激。

【问题讨论】:

    标签: r dplyr shiny shiny-server shiny-reactivity


    【解决方案1】:

    您不能将非标准评估与字符串混为一谈,这实际上是在您的代码中完成的。

    从 dplyr 1.0.0 开始,您可以使用 cross 并将它们组合在一个向量中:

    只是相关的行:

      group_by(across(c("gear", input$value))) %>%
    

    【讨论】:

    • 哇,我不知道cross函数。非常感谢:)
    猜你喜欢
    • 2023-04-05
    • 2018-02-07
    • 2017-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 2018-10-01
    • 2016-10-18
    相关资源
    最近更新 更多