我有一个闪亮的应用程序,如果用户想要显示数据,用户可以选中一个框,如果是这样,他可以选择要在主面板中显示的数据表的数量。有2个操作按钮,一个用于提交和刷新。如果用户在selectinput中选择1或2或3并点击提交。它将在主面板中显示3个数据表。一旦他点击刷新或取消选中该复选框,它就会清除主面板屏幕,但如果他决定再次选中该复选框,则最后显示的表格将显示在主面板上。这也应该清除屏幕。如果他再次勾选该框,我该如何清除屏幕。这是我的代码。感谢您关注此事我是R和Shiny的新手
library(shiny)
library(DT)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
checkboxInput("addData", "Add Data"),
conditionalPanel(condition="input.addData === true",
selectInput("amountTable", "Amount Tables", 1:10),
actionButton("submit1" ,"Submit", icon("refresh"),
class = "btn btn-primary"),
actionButton("refresh1" ,"Refresh", icon("refresh"),
class = "btn btn-primary")
)
),
mainPanel(
# UI output
uiOutput("dt")
)
)
)
server <- function(input, output, session) {
global <- reactiveValues(refresh = FALSE)
observe({
if(input$refresh1) isolate(global$refresh <- TRUE)
})
observe({
if(input$submit1) isolate(global$refresh <- FALSE)
})
observeEvent(input$submit1, {
lapply(1:input$amountTable, function(amtTable) {
output[[paste0('T', amtTable)]] <- DT::renderDataTable({
iris[1:amtTable, ]
})
})
})
observeEvent(input$submit1, {
lapply(1:input$amountTable, function(j) {
output[[paste0('Text', j)]] <- renderText({
paste0("This is AmountTable", j)
# br() ## add space in between the text and table
})
})
})
output$dt <- renderUI({
if(global$refresh) return()
tagList(lapply(1:input$amountTable, function(i) {
list(textOutput(paste0('Text', i)),br(),
dataTableOutput(paste0('T', i)))
}))
})
}
shinyApp(ui, server)
答案 0 :(得分:2)
您可以将此代码添加到server
功能。
observe({
if(input$addData == FALSE) isolate(global$refresh <- TRUE)
})
取消选中checkbox
答案 1 :(得分:2)
你应该使用
if(input$refresh1 | !input$addData) isolate(global$refresh <- TRUE)
代替此行if(input$refresh1) isolate(global$refresh <- TRUE)
编辑:krish更快。但是,我留下答案就像缩短代码一样。