以闪亮的意外行为取消组合和选择

Posted

技术标签:

【中文标题】以闪亮的意外行为取消组合和选择【英文标题】: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)

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

【问题讨论】:

【参考方案1】:

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

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

只是相关的行:

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

【讨论】:

哇,我不知道cross函数。非常感谢:)

以上是关于以闪亮的意外行为取消组合和选择的主要内容,如果未能解决你的问题,请参考以下文章

使用嵌套在闪亮应用程序的可反应详细信息函数中的 tabsetPanel 的意外选项卡行为

在闪亮的应用程序中取消选择列或编辑数据表时,下载按钮消失

R闪亮:更新data.table中的选择输入值

闪亮的R或两个输入过滤器

jQuery行上的不同行为取消选择,我不明白为什么

如何在闪亮或 flexdahsboard 中制作用户选择的变量图表?