Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 条件输出图_R_Shiny - Fatal编程技术网

R 条件输出图

R 条件输出图,r,shiny,R,Shiny,假设我有一个条件面板 fluidRow(column(12,selectInput("models", label = "Models",choices =list("choice 1"=1,"choice 2"=2)))) tabsetPanel(tabPanel(strong("plots"), plotOutput("plot 1"), plotOutput("pl

假设我有一个条件面板

fluidRow(column(12,selectInput("models", label = "Models",choices =list("choice 1"=1,"choice 2"=2))))    

tabsetPanel(tabPanel(strong("plots"),
                             plotOutput("plot 1"),
                             plotOutput("plot 2")))

现在,根据一些选择输入值,我想显示图1或图2。有没有办法在一个闪亮的应用程序中做到这一点

第一个版本,在渲染中选择:

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)
第三个选项,带有uiOutput:


在所有情况下,仅当您实际显示该绘图时,才应准备该绘图。

您可能需要conditionalPanel请提供一个可复制的示例,以便其他人可以更好地帮助您。我更喜欢使用shinyjs::hide另一种可能是使用单个绘图输出,并选择要在服务器上渲染的绘图,例如,类似if identicalinput$selectvalue、plot1{plot1}else的内容plot2@PoGibas我的想法是,我不想对每个绘图启动数据处理,然后隐藏其中的一些内容them@akrun我刚刚编辑了我的帖子
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)
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)