闪亮:使用 show 方法时 lubridate 和 shinyjs 之间有冲突吗?

shiny: conflict between lubridate and shinyjs when using show method?

我正在开发一个应用程序,我在其中使用 shinyjs 包来隐藏和显示 navbarPage 元素的选项卡。它工作正常,直到我决定将我的应用程序中的 lubridate 用于其他目的。仅通过 library 调用,当我尝试使用 show/hide 功能时应用程序冻结:

Warning: Error in show: unused argument (selector = "#navbar li a[data-value=mydata]")

我的代码(尝试加载或不加载 lubridate)

library(shiny); library(shinyjs); library(lubridate)
ui <- fluidPage(useShinyjs(), navbarPage(id="navbar", title="Analysis",
                                       tabPanel(title="Home", p("here is main page"), checkboxInput("show_other_tab", "show other tab?", value=FALSE)),
                                       tabPanel(title="My Data", value="mydata", p("some other text"))))
server = function(input, output, session){
     hide(selector = "#navbar li a[data-value=mydata]")
     observe({
          if (input$show_other_tab) {
               show(selector = "#navbar li a[data-value=mydata]")
          } else {
               hide(selector = "#navbar li a[data-value=mydata]")}})}
shinyApp(ui, server)

这是我的 session.info(): R 3.4.2 [1] lubridate_1.7.1 shinyjs_0.9.1 shiny_1.0.5

是什么导致了这个错误以及如何避免这个错误?谢谢

如果您在第 9 行(show 所在的位置)设置断点并在您的控制台中键入 show,您将看到它是从包 methods 中获取的,而不是shinyjs:

Browse[2]> show
standardGeneric for "show" defined from package "methods"

加载 lubridate 似乎是造成这种情况的原因。解决方法是在该行中使用 shinyjs::show,以确保它来自 shinyjs 包。

顺便说一句,自 Shiny 1.0.4 以来,有内置函数 showTabhideTab

ui <- navbarPage(id="navbar", title="Analysis",
                 tabPanel(title="Home", id =p("here is main page"), checkboxInput("show_other_tab", "show other tab?", value=FALSE)),
                 tabPanel(title="My Data", value="mydata", p("some other text")))
server = function(input, output, session){
  observe({
    if (input$show_other_tab) {
      showTab("navbar", target = "mydata")
    } else {
      hideTab("navbar", target = "mydata")
    }
  })
}
shinyApp(ui, server)