在选项卡之间切换时保留绘图和输入值选项卡

2023-09-03 14:06:18 作者:趣味贩卖机

我有一个带有两个不同选项卡面板的shinydashboard应用程序。每个选项卡都有不同的输入值,当单击操作按钮时,它们都会生成图形。

每当我在这些选项卡之间切换时,它们各自的图形都会消失,并且输入值被重置为默认值。

即使当用户决定在面板之间切换时,我也希望将选项卡保持在用户修改的状态(即保留图形和输入)。

ppt怎么设置或修改自动保存时间

代码

library(shiny)
library(shinydashboard)


ui <- fluidPage(
  dashboardPage(
    dashboardHeader(title = "DASHBOARD"),

    dashboardSidebar(
      uiOutput("mysidebar"),
    ),

    dashboardBody(
      tabsetPanel(type = "tabs", id = "tab", 
                  tabPanel("Tab1", fluid = TRUE, value = 1,plotOutput("A")),
                  tabPanel("Tab2", fluid = TRUE, value = 2, plotOutput("B"))
      )
    )
  )

)

server <- function(input, output, session){
  output$mysidebar <- renderUI({

    if(input$tab == 1){
      tagList(
        sliderInput(inputId = "Sample",
                    label = "Enter Number of Samples:",
                    min = 1000, max = 100000,
                    value = 10000),
        fluidRow(
          column(6,
                 actionButton(inputId = "b1", label = "Generate"))
        )}

    if(input$tab == 2){
      tagList(
        sliderInput(inputId = "Weight",
                    label = "Enter Weight:",
                    value = 100),
        fluidRow(
          column(6,
                 actionButton(inputId = "b2", label = "Generate"))
        )}

    p1<- eventReactive(input$b1, {
      #creating a dataframe using input "Sample" in tab1 - Rough example
      df <- input$Sample

    })
    output$SA <- renderPlot({

        plot(df)

    })

    p2 <- eventReactive(input$b2, {
      #creating a dataframe using input "Weight" in tab2-- Rough example
      df2 <- input$Weight

    })
    output$A <- renderPlot({

      plot(p1())

    })
   output$B <- renderPlot({

      plot(p2())

    })
}

推荐答案

我非常希望您使用showhide包中的shinyjshide功能,这样当您在选项卡之间切换时,这些值将被保留

library(shiny)
library(shinyjs)
library(shinydashboard)


ui <- fluidPage(
  dashboardPage(
    dashboardHeader(title = "DASHBOARD"),

    dashboardSidebar(
      useShinyjs(),
      sliderInput("Sample","Enter Number of Samples:",min = 1000, max = 100000,value = 10000),
      sliderInput("Weight","Enter Weight:",min = 1, max = 1000,value = 100),
      fluidRow(column(6,actionButton("b1","Generate"),actionButton("b2","Generate")))
    ),

    dashboardBody(
      tabsetPanel(type = "tabs", id = "tab", 
                  tabPanel("Tab1", fluid = TRUE, value = 1,plotOutput("A")),
                  tabPanel("Tab2", fluid = TRUE, value = 2, plotOutput("B"))
      )
    )
  )

)

server <- function(input, output, session){

  observe({
    if(input$tab == 1){
      show("Sample")
      show("b1")
      hide("Weight")
      hide("b2")
    }
    if(input$tab == 2){
      hide("Sample")
      hide("b1")
      show("Weight")
      show("b2")
    }
  })

  p1<- eventReactive(input$b1,{
    df <- rnorm(input$Sample)
  })
  output$SA <- renderPlot({
    plot(df)
  })

  p2 <- eventReactive(input$b2,{
    df2 <- rnorm(input$Weight)
  })

  output$A <- renderPlot({plot(p1())})
  output$B <- renderPlot({plot(p2())})
}

shinyApp(ui, server)

 
精彩推荐
图片推荐