R Shiny:如何构建函数以在R中创建许多类似的renderUI选择器?

问题描述 投票:0回答:1

我正在从事一个项目,该项目需要许多选择器,这些选择器实际上执行相同的操作。我不能在Shiny Dashboard中多次使用相同的renderUI输出,因此我不得不复制,粘贴和更改小东西(例如变量名)来克服这一问题。但是,仪表板的代码现在接近一千行,我想使用一个函数来简化此过程,在该函数中,我可以传递参数并输出唯一的renderUI对象。以下是我创建的类似renderUI选择器的示例:

# Region Picker
output$picker_Region_Map <- renderUI({
  ls_regions_map <- df_raw %>%
    distinct(Region) %>%
    pull()
  pickerInput(
    inputId = "mapRegion"
    , label = "Region"
    , choices = ls_regions_map 
    , multiple = TRUE
    , selected = ls_regions_map
    , options = list(`actions-box` = TRUE))  
}) #renderUI End

# Campus Picker
output$picker_Campus_Map <- renderUI({
  ls_campus_map <- df_raw %>%
    filter(Region %in% input$mapRegion) %>%
    distinct(Campus) %>%
    pull()
  pickerInput(
    inputId = "mapCampus"
    , label = "Campus" 
    , choices = ls_campus_map
    , multiple = TRUE
    , selected = ls_campus_map
    , options = list(`actions-box` = TRUE)) 
}) #renderUI End

# Region Picker
output$picker_Region<- renderUI({
  ls_regions <- df_raw %>%
    distinct(Region) %>%
    pull()
  pickerInput(
    inputId = "inRegion"
    , label = "Region"
    , choices = ls_regions 
    , multiple = TRUE
    , selected = ls_regions 
    , options = list(`actions-box` = TRUE))
}) #renderUI End

# Campus Picker
output$picker_Campus <- renderUI({
  ls_campus <- df_raw %>%
    filter(Region %in% input$inRegion) %>%
    distinct(Campus) %>%
    pull()
  pickerInput(
    inputId = "inCampus"
    , label = "Campus" 
    , choices = ls_campus
    , multiple = TRUE
    , selected = ls_campus
    , options = list(`actions-box` = TRUE))
}) #renderUI End

有人曾有过这种经历吗?有什么建议吗?

这是我在网站上的第一个问题,因此,如果任何内容的格式不正确或不符合准则/规定,请告诉我!

谢谢!

r shiny dashboard picker
1个回答
0
投票

这是我可能会开始重构校园选择器的方式。

这将显示在我的全局脚本中:

standardPicker <- function(.inputId, .label, .choices) { 
    pickerInput(inputId = .inputId, label = .label, choices = .choices, 
        selected = .choices, multiple = T, options = list('actions-box' = TRUE))
 }

这将显示在我的服务器中:

ls_campus <- reactive({
    df_raw %>%
    filter(Region %in% input$inRegion) %>%
    distinct(Campus) %>%
    pull()
 })

 output$picker_Campus <- renderUI(standardPicker('inCampus','Campus',ls_campus())
© www.soinside.com 2019 - 2024. All rights reserved.