【问题标题】:Shiny conditionalPanel - condition doesn't work (output condition)闪亮的条件面板 - 条件不起作用(输出条件)
【发布时间】:2015-10-08 15:19:33
【问题描述】:

我正在尝试根据我的 server.R 代码中生成的输出在 Shiny 中使用条件面板。我不能使用输入,因为这不适合我的需要。 我的代码基于我在以下网站上找到的示例:http://rstudio.github.io/shiny/tutorial/#dynamic-ui

UI.R 代码:

tabSubMenuSaveData <-
  tabItem("subMenuSaveData",      
          conditionalPanel(
            condition = "output.test",  
              uiOutput(outputId = "ui_save_data")
          )
  )

Server.R 代码:

dataset <- reactive({
  datasets()$datasetlist[[input$datasetSelector]]
})

output$test <- reactive({
  print("Test")
  nrow(dataset())
})

-> dataset() 在我的 Shiny 应用程序中提供当前选择的数据集。

似乎我的应用程序甚至没有到达 output$test 部分,因为它没有显示我的打印。每当我按下“保存数据”选项卡时,它应该会出现在这里。

如果有人可以为我提供解决方案或解释为什么我的应用程序没有进入 output$test 部分,我将不胜感激。

【问题讨论】:

    标签: r conditional shiny


    【解决方案1】:

    没有设法根据前面给出的答案找到可行的解决方案。 我的一个朋友确实设法帮助我找到了一个可行的解决方案。答案如下:

    UI.R 代码:

    tabSubMenuSaveData <-
      tabItem("subMenuSaveData", 
              conditionalPanel(
                condition = ("output.file_Uploaded > 0"),
                uiOutput(outputId = "ui_save_data")
              )
      ) 
    

    Server.R 代码:

    output$file_Uploaded <- reactive({
      return(!is.null(getData())) 
    })
    

    所以基本上我已经在我的代码中使用了前面定义的另一个反应函数。 不过,感谢您的帮助!

    【讨论】:

      【解决方案2】:

      output$test 必须是输出,并且必须在 ui 端调用。我有一个处理同样问题的应用程序,我使用了这样的东西:

      #ui.R

      ...
      htmlOutput("check_cond"),
      conditionalPanel( 
          condition = "!output.check_cond",
          ...
      )
      

      #server.R

      output$check_cond <- renderUI({ 
           if(nrow(dataset()) > 0) return NULL
           div('Choose a proper dataset!', align = 'center', style = 'color: red;')
      })
      

      【讨论】:

        【解决方案3】:

        我认为那些文档非常过时...我从未见过以这种方式使用输出,我只是尝试了该页面中的代码,但它似乎不起作用。

        作为替代解决方案,您可以使用shinyjs 来显示/隐藏面板,而不是使用conditionalPanel。例如(这是未经测试的代码):

        # install.packages("shinyjs")
        library(shinyjs)
        
        # UI:
        
        ...
        tabSubMenuSaveData <-
          tabItem("subMenuSaveData",   
                  div(id = "mydiv",    
                    uiOutput(outputId = "ui_save_data")
                  )
          )
        ...
        
        
        # server:
        
        ...
        dataset <- reactive({
          datasets()$datasetlist[[input$datasetSelector]]
        })
        
        observe({
          toggle(id = "mydiv", condition = nrow(dataset()) > 0)
        })
        ...
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-03-03
          • 2017-04-29
          • 1970-01-01
          • 2021-04-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多