我的主面板中有一个dataTableOutput。然后我有一个动作按钮" Go"。点击" Go"我希望rHandsOutput出现在主面板中,但不在dataTableOutput下面。如何在主面板中删除dataTableOutput并显示rHandsOutput。在我当前的代码中,两个表一起出现。点击" Go"后,第二个表位于第一个表格中,我希望只显示第二个表格(rHandsOutput)从主面板中删除第一个表格。
请帮助我!1
答案 0 :(得分:0)
动态生成ui。
在uiOutput("someidentifier")
中使用ui.r
,然后使用server.r
output$someidentifier <-
renderUI({
dataTableOutput("datatableidentifier")
})
output$datatableidentifier <- renderDataTable(iris)
uiOutput
取代您想要动态添加的任何ui元素的位置(在ui.r
中)。然后,该ui的必要代码将移至renderUI
中的server.r
。
答案 1 :(得分:0)
您可以结合使用insertUI
和removeUI
使UI组件动态化。例如:
library(shiny)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
actionButton(inputId = "go", label = "Go")
),
mainPanel(
fluidRow(
tags$div(id = "firstOutput",
dataTableOutput("myDataTable"))
),
fluidRow(
tags$div(id = "placeholder") # the dynamic UI will be inserted relative to this placeholder
)
))
)
server <- function(input, output) {
output$myDataTable <- renderDataTable(iris)
observeEvent(input$go, {
removeUI("div:has(>#firstOutput)")
insertUI(
selector = "#placeholder",
where = "afterEnd", # inserts UI after the end of the placeholder element
ui = fluidRow(
actionButton(inputId = "newButton", label = "A new button")))
})
}
shinyApp(ui = ui, server = server)
答案 2 :(得分:0)
您可以使用showElement()
中的hideElement()
和shinyjs
:
observeEvent(input$go, {
shinyjs::hideElement(“firsttable”)
shinyjs::showElement(“rHandsOutput”)
})
假设第一个表的ID为“ firsttable”,第二个表的ID为“ rHandsOutput”,“ Go”按钮的ID为“ go”。