Hi Friends ,
Can you please help to correct the errors in below code as im unable to use group_by and nest in shiny. Below is simplified example.
library(tidyverse)
library(shiny)
x<-rnorm(10,100,20)
y<-c("a","a","a","a","a","b","b","b","b","b")
t<-data.frame(x,y)
ui<-fluidPage(
mainPanel(
selectInput("Grp","Input Group",choices=names(t)),
tableOutput("table_1")
)
)
Fraction<-function(df){
df/sum(df)
}
server <-function(input,output){
nested<-reactive({
req(input$Grp)
t %>%
group_by(input$Grp)%>%
nest()
})
output$table_1<-renderTable({
map(nested()$data,Fraction)
})
}
shinyApp(ui=ui,server=server)
'''
----------------------
The normal R code works fine that is similar to above
x <- rnorm(10, 100, 20)
y <- c("a", "a", "a", "a", "a", "b", "b", "b", "b", "b")
t <- data.frame(x, y)
t1 <- t %>% group_by(y) %>% nest()
Fraction <- function(df) {
df / sum(df)
}
t2 <- map(t1$data, Fraction)
t2
jdurvesh:
x <- rnorm(10, 100, 20)
y <- c("a", "a", "a", "a", "a", "b", "b", "b", "b", "b")
t <- data.frame(x, y)
t1 <- t %>% group_by(y) %>% nest()
Fraction <- function(df) {
df / sum(df)
}
t2 <- map(t1$data, Fraction)
t2
in your working code, group_by(y) works where y is the symbol for the name to group on, but in your shiny app input$Grp is itself a symbol (one not present in your t df.
the value of input$Grp might be "y" , to 'get at it' use library(rlang)
t %>%
group_by(!!sym(input$Grp))%>%
nest()
Hi Sir ,
Thanks for prompt help any resources u can recommend where such differences between R and Shiny can be found.
Its not really a difference.
input$Grp is like any variable in base R as far as the group by is concerned
in base R without shiny if you had
x <- rnorm(10, 100, 20)
y <- c("a", "a", "a", "a", "a", "b", "b", "b", "b", "b")
t <- data.frame(x, y)
variable_to_group_by <- "y"
#would fail
t1 <- t %>% group_by(variable_to_group_by ) %>% nest()
#would work
t1 <- t %>% group_by(!!sym(variable_to_group_by )) %>% nest()
1 Like
You can have a look here at shiny specifically: https://mastering-shiny.org/
and then on the !! (bang bang operator) you can have a look here: https://adv-r.hadley.nz/meta-big-picture.html this relates to normal R but can be used in shiny as @nirgrahamuk showed.
1 Like
smichal
September 16, 2020, 11:47am
6
Here, you are briefly touching the subject of tidy evaluation or programming in dplyr . Your shiny input variable input$Grp is a string (as nirgrahamuk already mentioned) which you need to convert into a symbol to mimick typing y (as in your explicit example).
1 Like
system
Closed
September 23, 2020, 11:47am
7
This topic was automatically closed 7 days after the last reply. New replies are no longer allowed. If you have a query related to it or one of the replies, start a new topic and refer back with a link.