取消分组 & Select 闪亮的意外行为
Ungroup & Select in shiny unexpected behaviour
我有一个 shiny 应用程序,当我将输出的“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)
如果有人能向我解释为什么两者的结果不匹配,我将不胜感激。
您不能将非标准求值与字符串混淆,实际上您在代码中确实这样做了。
从 dplyr 1.0.0 开始,您可以使用 across 并将它们组合在一个向量中:
只是相关行:
group_by(across(c("gear", input$value))) %>%
我有一个 shiny 应用程序,当我将输出的“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)
如果有人能向我解释为什么两者的结果不匹配,我将不胜感激。
您不能将非标准求值与字符串混淆,实际上您在代码中确实这样做了。
从 dplyr 1.0.0 开始,您可以使用 across 并将它们组合在一个向量中:
只是相关行:
group_by(across(c("gear", input$value))) %>%