我有uiOutput和plotOutput组件在我的主闪亮面板。
plotOutput("plot_data"),
uiOutput("summary_data")
我在服务器函数中有典型的代码来响应和填充每个组件,例如:
output$plot_data <- renderPlot({
hist(data_vars())
})
output$summary_data <- renderPrint({
summary(data_vars())
})
我想为每个添加功能,将另一个的输出组件设置为NULL或空字符串等,以便这两个输出共享相同的空间。当一个有数据时,另一个是空的。我不认为它会这样工作,但它可能看起来像这样:
output$plot_data <- renderPlot({
# Code to "flatten" uiOutput
# Then populate the component
hist(data_vars())
})
output$summary_data <- renderPrint({
# Code to "flatten" plotOutput
# Then populate the component
summary(data_vars())
})
我认为这可能是通过使用observeEvent完成的,但我还没有找到一种方法来完全删除一个内容,以便另一个可以占用页面上相同的空间。请帮助。谢谢你。
而不是有一个单独的plotOutput
和printOutput
,您可以只有一个uiOutput
,然后您可以在服务器中添加代码来显示您希望在该插槽中显示哪个输出。下面是一个工作示例,我添加了一个按钮来在视图之间切换。
library(shiny)
ui <- fluidPage(
actionButton("swap","Swap"),
uiOutput("showPart")
)
server <- function(input, output, session) {
showState <- reactiveVal(TRUE)
observeEvent(input$swap, {showState(!showState())})
output$plot_data <- renderPlot({
hist(mtcars$mpg)
})
output$summary_data <- renderPrint({
summary(mtcars)
})
output$showPart <- renderUI({
if (showState()) {
plotOutput("plot_data")
} else {
verbatimTextOutput("summary_data")
}
})
}
shinyApp(ui, server)
使用此方法,两个输出中只有一个将在uiOutput插槽中呈现。