2016-05-25 7 views
0

私の輝くアプリケーションには複数のタブがあります。いずれかのタブでは、別のタブでレポートを作成するために使用したいプロット出力があります。私は、ユーザーが報告する出力を選択するためのチェックボックスを最初のタブに含めました。 2番目のタブでは、最初のタブの選択に基づいてチェックボックスのグループ入力を更新しようとしています。しかし、私は選択された最初のオプションのみを取得しています。次のようにupdateCheckBoxGroupInputは他のチェックボックスの選択に基づいて光沢があります

再現可能なコードは次のとおりです。これはifelse条件に基づいています。

library(shiny) 
library(shinydashboard) 

ui <- dashboardPage(
        dashboardHeader(
         title = "MODULE",titleWidth = 225 
        ), 
        dashboardSidebar(
         width = 225, 
         sidebarMenu(id = "tabs", 
            menuItem("TOPLINES", tabName = "tplines", icon = shiny::icon("dashboard")), 
            menuItem("MY MONTHLY REPORTS", tabName = "myweeklyrep", icon = shiny::icon("compass")) 
         )), 
        dashboardBody(
         tabItems(
          tabItem(
           tabName = "tplines", 
           fluidRow(
            box(
             checkboxInput(inputId = "inventorytop8metrocheck", "Add to reports", value = FALSE), 
             width = 6, status = "info", title = "Inventory information", 
             div(plotlyOutput("inventorytop8metro"), width = "100%", height = "400px", style = "font-size:80%;") 
            ), 
            box(
             checkboxInput(inputId = "top15categoriestplinescheck", "Add to reports", value = FALSE), 
             width = 6, status = "info", title = "Top 15 categories", 
             div(plotlyOutput("top15categoriestplines"), style = "font-size:90%") 
            ))), 
          tabItem(
           tabName = "myweeklyrep", 
           fluidRow(
            h4("AVAILABLE ANALYSIS", align = 'center'),br(), 
            column(width = 12, 
              list(tags$div(align = 'left', 
                 class = 'multicol', 
                 checkboxGroupInput(inputId = 'analysisSelector', 
                      label = "Select the analysis:", 
                      choices = "", 
                      selected = "", 
                      inline = FALSE))) 
            )))))) 

server <- function(session,input,output){ 
    observe({ 
      updateCheckboxGroupInput(session, inputId = "analysisSelector", label = "", choices = 
             ifelse(!is.null(input$top15categoriestplinescheck) || length(input$top15categoriestplinescheck) != 0, "Inventory top 8 metros", 
              ifelse(!is.null(input$inventorytop8metrocheck) || length(input$inventorytop8metrocheck) != 0, "Top 15 categories - Topline", "No selection")), 
            selected = "",inline = FALSE) 

    }) 
} 

shinyApp(ui,server) 

私は、場合にしようとした他にもあれば、彼らは働いていません。何かご意見は?

ザ・場合は、もし他の条件:

updateCheckboxGroupInput(session, inputId = "analysisSelector", label = "", choices = 
           if(!is.null(input$top15categoriestplinescheck) || length(input$top15categoriestplinescheck) != 0){ 
            "Inventory top 8 metros" 
           } else if (!is.null(input$inventorytop8metrocheck) || length(input$inventorytop8metrocheck) != 0){ 
            "Top 15 categories - Topline" 
           } else { 
            return() 
           }, 
          selected = "",inline = FALSE) 

EDIT:かかわらず、それらが選択されているかどうかのかのチェックボックスをレンダリング:

は、私は、次のオプションを試してみました。

getlist <- reactive({ 
     if(!is.null(input$top15categoriestplinescheck) & !is.null(input$inventorytop8metrocheck)){ 
      c("Top 15 categories - Topline","Inventory of top 8 metros - Topline") 
     } else if (!is.null(input$top15categoriestplinescheck)){ 
      "ABC" 
     } else if (!is.null(input$inventorytop8metrocheck)){ 
      "DEF" 
     } else { 
      return() 
     } 
    }) 

    observe({ 
      updateCheckboxGroupInput(session, inputId = "analysisSelector", label = "Select the analysis:", choices = 
             as.list(getlist()), 
            selected = "",inline = FALSE)    
    }) 

答えて

1

?observeEventを参照してください)この関数のドキュメントで説明したように、これは実際にobserveEventで扱いやすいです。私が理解しているところから、それは実際にobserveを包むが、より直感的な方法である。

イベント(この場合はcheckboxGroupInputのいずれかをクリック)とこのイベントが発生したときに実行するアクションの2つの引数を渡す必要があります。

server機能は、このようになった:

server <- function(session,input,output){ 
    updateAnalysisSelector <- function(session) { 
     choices <- ifelse(input$top15categoriestplinescheck, "Inventory top 8 metros", 
          ifelse(input$inventorytop8metrocheck, "Top 15 categories - Topline", "No selection")) 
     updateCheckboxGroupInput(session, 
           inputId = "analysisSelector", 
           label = "Select the analysis:", 
           choices = choices, 
           selected = "", 
           inline = FALSE) 
    } 

    observeEvent(input$top15categoriestplinescheck, updateAnalysisSelector(session)) 
    observeEvent(input$inventorytop8metrocheck, updateAnalysisSelector(session)) 
} 

私はあなたのUIは、2つの独立したチェックボックスのグループを持っていなかった場合、これは簡単にすることができたと確信しているが、これはあなたの現在の実装のために動作します。

+0

多くのおかげさま...現在のところ、あなたのソリューションは一度に1つのチェックボックスだけをレンダリングしています....それらの両方をレンダリングする方法はありますか – Apricot