第一个版本,以选择在渲染:
library(shiny)
ui <- fluidPage(fluidRow(column(12,selectInput("models", label = "Models",choices =list("A-Plots"=1,"B-Plots"=2)))),
tabsetPanel(tabPanel(strong("plots"),
lapply(1:5, function(i) plotOutput(paste0("plot", i))))))
server <- function(session, input, output) {
plotsA <- lapply(1:5, function(x) function(y) (plot(1:10, main=paste("Plot A", x))))
plotsB <- lapply(1:5, function(x) function(y) (plot(1:10, main=paste("Plot B", x))))
for (i in 1:5) local({
my_i <- i
output[[paste0("plot", my_i)]] <- renderPlot({
switch(input$models, "1"=plotsA, "2"=plotsB)[[my_i]]()})
})}
shinyApp(ui = ui, server = server)
版本2 conditionalPanel
:
库(闪亮)
ui <- fluidPage(fluidRow(column(12,selectInput(
"models", label = "Models", choices =list("A-Plots"=1,"B-Plots"=2)))),
tabsetPanel(tabPanel(strong("plots"),
conditionalPanel("input.models==1",
lapply(1:5, function(i) plotOutput(paste0("plot", i)))),
conditionalPanel("input.models==2",
lapply(6:10, function(i) plotOutput(paste0("plot", i)))))))
server <- function(session, input, output) {
plotsA <- lapply(1:5, function(x) function(y) (plot(1:10, main=paste("Plot A", x))))
plotsB <- lapply(1:5, function(x) function(y) (plot(1:10, main=paste("Plot B", x))))
for (i in 1:5) local({
my_i <- i
output[[paste0("plot", my_i)]] <- renderPlot({plotsA[[my_i]]()})
})
for (i in 6:10) local({
my_i <- i
output[[paste0("plot", my_i)]] <- renderPlot({plotsB[[my_i-5]]()})
})
}
shinyApp(ui = ui, server = server)
第三种选择,与uiOutput
:
library(shiny)
ui <- fluidPage(fluidRow(column(12,selectInput(
"models", label = "Models", choices =list("A-Plots"=1,"B-Plots"=2)))),
tabsetPanel(tabPanel(strong("plots"),
uiOutput("plots"))))
server <- function(session, input, output) {
plotsA <- lapply(1:5, function(x) function(y) (plot(1:10, main=paste("Plot A", x))))
plotsB <- lapply(1:5, function(x) function(y) (plot(1:10, main=paste("Plot B", x))))
output$plots <- renderUI(lapply(switch(input$models, "1"=1:5, "2"=6:10),
function(y) plotOutput(paste0("plot", y))))
for (i in 1:5) local({
my_i <- i
output[[paste0("plot", my_i)]] <- renderPlot({plotsA[[my_i]]()})
})
for (i in 6:10) local({
my_i <- i
output[[paste0("plot", my_i)]] <- renderPlot({plotsB[[my_i-5]]()})
})
}
shinyApp(ui = ui, server = server)
在所有情况下,只有在您实际显示该情节时才应该准备情节。
您可能需要'conditionalPanel'请提供一个可重复的示例,以便其他人可以更好地帮助您 – akrun
我更喜欢使用'shinyjs :: hide' http://deanattali.com/2015/04/23/shinyjs-r- package/ – PoGibas
另一种可能性是有一个'plotOutput',并选择在服务器上呈现哪个图表,例如类似于'if(identical(input $ selectvalue,“plot1”{plot1()} else plot2())' –