R/mod_mosaic.R

Defines functions mod_mosaic_server mod_mosaic_ui

#' mosaic UI Function
#'
#' @description A shiny Module.
#'
#' @param id,input,output,session Internal parameters for {shiny}.
#'
#' @noRd 
#'
#' @importFrom shiny NS tagList 
#' @importFrom ggmosaic geom_mosaic ddecker GeomMosaic GeomMosaicJitter GeomMosaicText geom_mosaic_jitter geom_mosaic_text hbar hspine mosaic product scale_x_productlist spine StatMosaic StatMosaicJitter StatMosaicText theme_mosaic vbar vspine 
#' @importFrom ggplot2 ggplot theme element_blank element_text
mod_mosaic_ui <- function(id){
  ns <- NS(id)
  tagList(
    
    semantic.dashboard::box(
      title = 'Prevalence of Headache Symptom',
      width = 16,    
    shiny.semantic::dropdown_input(ns('grouponevar'),
                                   choices = c('First grouping variable: No selection',names(dataset)[2:18]),
                                   default_text = 'First Grouping Variable',
                                   value = 'First grouping variable: No selection'),
    
    shiny.semantic::dropdown_input(ns('grouptwovar'),
                                   choices = c('Second grouping variable: No selection',names(dataset)[2:18]),
                                   default_text = 'Select Strata Variable',
                                   value = 'Second grouping variable: No selection'),
    
    
    plotly::plotlyOutput(ns('mosaic'))
    ),
    
    shiny::tableOutput(ns('crosstab'))
  )
}
    
#' mosaic Server Functions
#'
#' @noRd 
mod_mosaic_server <- function(id){
  moduleServer( id, function(input, output, session){
    ns <- session$ns
 
    
    
    output$mosaic <- plotly::renderPlotly({
      
      
      if(input[['grouponevar']] == 'First grouping variable: No selection' & input[['grouptwovar']] == 'Second grouping variable: No selection'){
        
        p <-  dataset %>%
          dplyr::select(HeadacheOnset) %>%
          stats::na.omit() %>%
          ggplot2::ggplot() +
          geom_mosaic(ggplot2::aes(x = product(HeadacheOnset)
                          , fill= HeadacheOnset),
                      offset = 0.0075)  + 
          #ggplot2::facet_wrap(~ .data[[input[['groupvar']]]] ,nrow = 1) +
          ggplot2::theme_void() +
          ggplot2::scale_fill_viridis_d() + 
          ggplot2::theme(legend.position = 'bottom') +
          ggplot2::labs(fill = '') 
        
        plotly::ggplotly(p)
      
        
      } else if (input[['grouponevar']] != 'First grouping variable: No selection' & input[['grouptwovar']] == 'Second grouping variable: No selection'){
        shiny::req(input[['grouponevar']])
        
        p <-  dataset %>%
          dplyr::select(.data[[input[['grouponevar']]]],HeadacheOnset) %>%
          stats::na.omit() %>%
          ggplot2::ggplot() +
          geom_mosaic(ggplot2::aes(x = product(HeadacheOnset)
                                   , fill= HeadacheOnset,
                                   conds = product(!!ggplot2::sym(input[['grouponevar']]))),
                      offset = 0.0075)  + 
          #ggplot2::facet_wrap(~ .data[[input[['groupvar']]]] ,nrow = 1) +
          ggplot2::theme_void() +
          ggplot2::scale_fill_viridis_d() + 
          ggplot2::theme(legend.position = 'bottom') +
          ggplot2::labs(fill = '') +
          theme(axis.text.y = element_blank(),
                axis.ticks.y=element_blank(),
                axis.text.x = element_text(angle = 90),
                legend.position = "right")
        
        plotly::ggplotly(p)
        
        
        
        
    #  } else if (input[['grouponevar']] == 'First grouping variable: No selection' & input[['grouptwovar']] != 'Second grouping variable: No selection'){
      #  shiny::req(input[['grouptwovar']])
        
        # p <-  dataset %>%
        #   dplyr::select(.data[[input[['grouptwovar']]]],HeadacheOnset) %>%
        #   stats::na.omit() %>%
        #   ggplot2::ggplot() +
        #   geom_mosaic(ggplot2::aes(x = product(HeadacheOnset)
        #                            , fill= HeadacheOnset),
        #               offset = 0.0075)  + 
        #   ggplot2::facet_wrap(~ .data[[input[['grouptwovar']]]] ,nrow = 1) +
        #   ggplot2::theme_void() +
        #   ggplot2::scale_fill_viridis_d() + 
        #   ggplot2::theme(legend.position = 'bottom') +
        #   ggplot2::labs(fill = '') 
        #+
        #  theme(axis.text.y = element_blank(),
        ##        axis.ticks.y=element_blank(),
        #        axis.text.x = element_text(angle = 90),
        #        legend.position = "right")
        
        #plotly::ggplotly(p)
        
        
        
        
      } else if (input[['grouponevar']] != 'First grouping variable: No selection' & input[['grouptwovar']] != 'Second grouping variable: No selection'){
        shiny::req(input[['grouponevar']])
        shiny::req(input[['grouptwovar']])
        
        p <-  dataset %>%
          dplyr::select(.data[[input[['grouponevar']]]],HeadacheOnset,.data[[input[['grouptwovar']]]]) %>%
          stats::na.omit() %>%
          ggplot2::ggplot() +
          geom_mosaic(ggplot2::aes(x = product(HeadacheOnset)
                                   , fill= HeadacheOnset,
                                   conds = product(!!ggplot2::sym(input[['grouponevar']]))),
                      offset = 0.0075)  + 
          ggplot2::facet_wrap(~ .data[[input[['grouptwovar']]]] ,nrow = 1) +
          ggplot2::theme_void() +
          ggplot2::scale_fill_viridis_d() + 
          ggplot2::theme(legend.position = 'bottom') +
          ggplot2::labs(fill = '') +
          theme(axis.text.y = element_blank(),
                axis.ticks.y=element_blank(),
                axis.text.x = element_text(angle = 90),
                legend.position = "right")
        
        plotly::ggplotly(p)
        
         
        
      }
    })
    
    
    
    
    
    
    
    
    output$crosstab <- renderTable({
      
      
      if(input[['grouponevar']] == 'First grouping variable: No selection' & input[['grouptwovar']] == 'Second grouping variable: No selection'){
        

        table_one <- arsenal::tableby( arsenal::formulize(x = 'HeadacheOnset'),
                                       data = dataset,
                                       control = arsenal::tableby.control(
                                         test = FALSE)
        )
        
        
        as.data.frame(summary(table_one,text = TRUE), text = "html") 
        
        
        
        
      } else if (input[['grouponevar']] != 'First grouping variable: No selection' & input[['grouptwovar']] == 'Second grouping variable: No selection'){
        shiny::req(input[['grouponevar']])
        
        table_one <- arsenal::tableby( arsenal::formulize(y = input[['grouponevar']],
                                                          x = 'HeadacheOnset'),
                                       data = dataset,
                                       control = arsenal::tableby.control(
                                         test = FALSE)
        )
        
        as.data.frame(summary(table_one,text = TRUE), text = "html")  
        
        
        
        
      } else if (input[['grouponevar']] == 'First grouping variable: No selection' & input[['grouptwovar']] != 'Second grouping variable: No selection'){
        shiny::req(input[['grouptwovar']])
        
        table_one <- arsenal::tableby( arsenal::formulize(x = 'HeadacheOnset'),
                                       strata = eval(as.name(input[['grouptwovar']])),
                                       data = dataset,
                                       control = arsenal::tableby.control(
                                         test = FALSE)
        )
        
        as.data.frame(summary(table_one,text = TRUE), text = "html")  
        
        
        
        
      } else if (input[['grouponevar']] != 'First grouping variable: No selection' & input[['grouptwovar']] != 'Second grouping variable: No selection'){
        shiny::req(input[['grouponevar']])
        shiny::req(input[['grouptwovar']])
        
        table_one <- arsenal::tableby( arsenal::formulize(y = input[['grouponevar']],
                                                          x = 'HeadacheOnset'),
                                       data = dataset,
                                       strata = eval(as.name(input[['grouptwovar']])),
                                       control = arsenal::tableby.control(
                                         test = FALSE)
        )
        
        
        
        as.data.frame(summary(table_one,text = TRUE), text = "html")  
        
      }
    }, sanitize.text.function = function(x) x)   
    
  })
}
    
## To be copied in the UI
# mod_mosaic_ui("mosaic_ui_1")
    
## To be copied in the server
# mod_mosaic_server("mosaic_ui_1")
gavandrewj/pdphApp documentation built on Dec. 20, 2021, 9:48 a.m.