R Shiny conditionalPanel奇怪的行为

时间:2016-07-11 00:37:53

标签: r shiny

我使用conditionalPanel创建了一个用户界面,该用户界面首先向用户展示了一个面板,然后使用tabsetPanel显示标签式信息中心。如下所示添加另一个tabPabel的简单操作会以某种方式阻止server.R文件运行。我已经使用print语句进行了测试。看起来Shiny应用程序正在破坏,但我无法找到语法错​​误或任何原因。

conditionalPanel(
  condition = "output.panel == 'view.data'",
  tabsetPanel(id = "type",
    tabPanel("Script", value = "script",
      fluidPage(
        br(),
        fluidRow(
          column(3, uiOutput("script.name")),
          column(3, uiOutput("script.message"))
        ),
        hr(),
        plotlyOutput("plotly")
      )
    ),
    tabPanel("Location", value = "location",
      fluidPage(
        br(),
        fluidRow(
          # column(3, uiOutput("id.range"))
        ),
        hr(),
        plotlyOutput("plot")
      )
    )
    # when this tabPanel is uncommented it doesn't work
    # ,tabPanel("Accelerometer", value = "accelerometer",
    #   fluidPage(
    #     br(),
    #     hr(),
    #     plotlyOutput("plot")
    #   )
    # ),
  )
)

1 个答案:

答案 0 :(得分:0)

它没有因为额外的tabPanel而失败,它失败了,因为它包含对output$plot的重复引用。 server函数的每个输出只能显示一次。例如,这会运行,但如果重复的行被取消注释,则会失败:

library(shiny)

ui <- shinyUI(fluidPage(
  # textOutput('some_text'),
  textOutput('some_text')
))

server <- shinyServer(function(input, output){
  output$some_text <- renderText('hello world!')
})

runApp(shinyApp(ui, server))

一个简单的解决方案是将render*函数的结果保存到局部变量,然后可以将其保存为两个输出:

library(shiny)

ui <- shinyUI(fluidPage(
  textOutput('some_text'),
  textOutput('some_text2')
))

server <- shinyServer(function(input, output){
  the_text <- renderText('hello world!')
  output$some_text <- the_text
  output$some_text2 <- the_text
})

runApp(shinyApp(ui, server))