我正在使用navbarPage使用sidebarPanel。
我想“声明”只有一个小部件(本例中为radioButtons),然后将每个标签链接到“main”sidebarPanel。如您所见,tab2对相对radioButtons没有反应。 我的项目结构更复杂,需要为某些选项卡设置相同的sidebarPanel,并为某些其他选项卡设置特定的sidebarPanel。 这是我正在使用的代码:
library(shiny)
server=function(input, output) {
output$plot1 = renderPlot({plot(runif(input$rb))})
output$plot2 = renderPlot({plot(runif(input$rb))})
}
ui = shinyUI(navbarPage("Test multi page",
tabPanel("tab1",
sidebarLayout(
sidebarPanel(
radioButtons("rb","Nr of obs:",choices = c("50 obs"=50,"300 obs"=300))
),
mainPanel(plotOutput("plot1"))
)
),
tabPanel("tab2",
sidebarLayout(
sidebarPanel(
radioButtons("rb","Nr of obs:",choices = c("50 obs"=50,"300 obs"=300))
),
mainPanel(plotOutput("plot2"))
)
)
))
shinyApp(ui = ui, server = server)
runApp("app")
答案 0 :(得分:2)
您无法以您想要的方式重复使用ui元素。你可以得到的最接近的是使用conditionalPanel。在下面的示例中,fixed
将是您要在多个页面上输入的输入。条件面板允许您根据活动选项卡添加ui组件,其中tabid
是tabsetPanel的id标签。你不必在这里使用renderUI和uiOutput,但如果你有很多标签和ui元素,它可能会让你更容易。要查看示例,请查看this app,然后单击“数据”菜单的选项卡。
sidebarPanel(
uiOutput("fixed"),
conditionalPanel("input.tabid == 'tab1'", uiOutput("ui_tab1")),
....
)
mainPanel(
tabsetPanel(id = "tabid",
...
)
答案 1 :(得分:0)
问题是您有两个输入小部件,inputId
设置为rb
。如果您将tab2
中的代码更改为:
radioButtons("rb2","Nr of obs:",choices = c("50 obs"=50,"300 obs"=300))
然后将其与output$plot2
中的server
:
output$plot2 = renderPlot({plot(runif(input$rb2))})
该应用程序将正常运行。
我认为发生这种情况的原因是因为闪亮会记住小部件的值,即使它们不可见。因此,您可以轻松地在rb
中使用tab1
的一个值,在rb
中使用不同的tab2
值。在这种情况下,不清楚应该绘制什么,因此第二个rb
被忽略。