如何让条件面板在 R shiny 中共享相同的反应对象?

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

我一直都明白 Shiny

conditionalPanel()
不能与另一个条件面板共享同一个反应对象。我的解决方案是一遍又一遍地构建基本相同的反应对象,每个反应对象都标记到每个条件面板。但这很麻烦。是否有一种有效的解决方法,可以在多个条件面板之间共享相同的反应目标?

我相信 Stack Overflow 中有一些相关的问题,但示例非常繁琐,难以破译。我在这里提供一个非常简单明了的例子。

我展示了下面的示例代码,我在其中注释掉了其中一个条件面板(第二个面板)的共享标题,以便用户可以有条件地渲染绘图或表格。如果我在第二个条件面板中取消注释该行,则绘图和表格都不会呈现。除了我在此示例中创建两个标头对象之外,还有人有解决方案吗?在实际的代码中,这将有两个以上的标头,所以你可以明白为什么我想分享那个响应式标头。

library(shiny)

DF <- data.frame(row.names = LETTERS[1:5], X = c(1:5), Y = c(6:10))

ui <- fluidPage(
  selectInput("view","View options:",c("Plot","Table")),
  conditionalPanel(
    condition = "input.view == 'Plot'",
    textOutput("header"),
    plotOutput("plot")
  ),
  conditionalPanel(
    condition = "input.view == 'Table'",
    # textOutput("header"),
    tableOutput("table")
  )
)

server <- function(input, output, session) {
  output$header <-renderText({paste(input$view,"has been selected")})
  output$plot <-  renderPlot({plot(DF$X,DF$Y)})
  output$table <- renderTable(DF)
}

shinyApp(ui, server)
r shiny panel shiny-reactivity
1个回答
0
投票

考虑到 Limey 的评论,它现在有效:

library(shiny)

DF <- data.frame(row.names = LETTERS[1:5], X = c(1:5), Y = c(6:10))

ui <- fluidPage(
  selectInput("view","View options:",c("Plot","Table")),
  textOutput("header"),
  conditionalPanel(
    condition = "input.view == 'Plot'",
    plotOutput("plot")
  ),
  conditionalPanel(
    condition = "input.view == 'Table'",
    tableOutput("table")
  )
)

server <- function(input, output, session) {
  output$header <-renderText({paste(input$view,"has been selected")})
  output$plot <-  renderPlot({plot(DF$X,DF$Y)})
  output$table <- renderTable(DF)
}

shinyApp(ui, server)
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.