我有 shiny
应用程序,下面的初始值应显示 iris
数据集的图。如果按下 Datatable
那么它应该显示 iris
数据集的数据表,如果再次按下它应该再次显示 iris
数据集的初始图。
如果按下 Iris3
那么它应该显示 iris3
数据集的图,如果再次按下它应该再次显示 iris
数据集的初始图。
library(shiny)
library(DT)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
actionButton("exc",
"Datatable"),
actionButton("other","Iris3")
),
mainPanel(
uiOutput(outputId = "iris_plot")
)
)
)
server <- function(input, output) {
showPlot <- reactiveVal(TRUE)
showPlotiris3 <- reactiveVal(TRUE)
observeEvent(input$exc, {
showPlot(!showPlot())
})
observeEvent(input$other, {
showPlotiris3(!showPlotiris3())
})
output$iris_plot <- renderUI({
if (showPlot()){
plotOutput("plot")
}
else if(showPlotiris3()){
plotOutput("plot2")
}
else{
dataTableOutput("table")
}
})
output[["plot"]] <- renderPlot({
plot(iris)
})
output[["plot2"]] <- renderPlot({
plot(iris3)
})
output[["table"]] <- renderDataTable(datatable(iris))
}
shinyApp(ui = ui, server = server)
答案 0 :(得分:1)
试试这个
library(shiny)
library(DT)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
actionButton("exc","Datatable"),
actionButton("other","Iris3")
),
mainPanel( verbatimTextOutput("t1"),
uiOutput(outputId = "iris_plot")
)
)
)
server <- function(input, output) {
store <- reactiveValues()
observe({store$plotrtable <- DTOutput("table")})
observeEvent(input$exc, {
if (as.numeric(input$exc) %% 2 == 1){store$plotrtable <- plotOutput("plot")
}else store$plotrtable <- DTOutput("table")
})
observeEvent(input$other, {
if (as.numeric(input$other) %% 2 == 1){store$plotrtable <- plotOutput("plot2")
}else store$plotrtable <- DTOutput("table")
})
output[["plot"]] <- renderPlot({
plot(iris)
})
output[["plot2"]] <- renderPlot({
plot(iris3)
})
output[["table"]] <- renderDT(datatable(iris))
output$iris_plot <- renderUI({
store$plotrtable
})
}
shinyApp(ui = ui, server = server)