Как сохранить значения в флажке в приложении R Shiny? - PullRequest
0 голосов
/ 23 апреля 2020

Я пытаюсь создать блестящее приложение. В этом конкретном приложении у меня есть набор радиокнопок, при выборе одной из которых будет отображаться набор параметров ниже в виде флажков, а при выборе другой радиокнопки - другой набор параметров. Пожалуйста, найдите пользовательский интерфейс и код сервера ниже.

library(shiny)
library(shinydashboard)
library(shinyWidgets)

d <-
  data.frame(
    year = c(1995, 1995, 1995, 1996, 1996, 1996, 1997, 1997, 1997),
    Product_Name = c(
      "Table",
      "Chair",
      "Bed",
      "Table",
      "Chair",
      "Bed",
      "Table",
      "Chair",
      "Bed"
    ),
    Product_desc = c("X", "X", "X", "Y", "Y", "Y", "Z", "Z", "Z"),
    Cost = c(1, 2, 3, 4, 2, 3, 4, 5, 6)
  )

ui <- shinyUI(fluidPage(
  useShinydashboard(),
  tabPanel(
    "Plot",
    sidebarLayout(
      sidebarPanel(
        radioButtons(
          "Choose",
          "Choose One",
          c("Year" = "p", "Numbers" = "l")
        ),
        uiOutput('checkbox'),
        #width = 2,
        position = "bottom"),
      mainPanel(uiOutput("graph"))

    )
  )
))

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

  output$graph <- renderUI({
    # create tabPanel with datatable in it
    req(input$year)
    tabPanel("Plots",
             fluidRow(lapply(as.list(paste0("plot", seq_along(input$year))), plotOutput)))

  })

  output$checkbox <- renderUI({
    if (input$Choose == "p") {
      checkboxGroupInput("Cross",
                         "Year",
                         choices = (unique(d$year)))

    } else{
      checkboxGroupInput("Cross_1",
                         "Numbers",
                         choices = c("1","2","3"))
    }

  })

}

shinyApp(ui, server)

Теперь проблема, с которой я сталкиваюсь, заключается в том, что при выборе переключателя «Год» значения года отображаются в виде флажков, а при выборе флажков соответствующие графики отображаются на главной панели. (Я не дал код здесь). Теперь, когда я выбираю переключатель «Номер», отображаются правильные опции флажков. Но когда я возвращаюсь назад к кнопке «Год». Уже выбранные значения флажков не сохраняются, поэтому пользователю необходимо снова установить флажки, чтобы получить соответствующие графики.

Пожалуйста, предложите мне, как сохранить значения в флажке, даже если выбран другой переключатель. Также обратите внимание, что параметры флажков под каждой радио-кнопкой будут меняться в соответствии с параметрами, выбранными пользователем на предыдущей вкладке. Поэтому я использую функцию наблюдения, чтобы получить соответствующие флажки.

1 Ответ

0 голосов
/ 24 апреля 2020

Я бы предложил показывать / скрывать флажки вместо использования renderUI. Таким образом, они сохранят свои настройки, даже если они не отображаются.

shinyjs - популярный пакет, который может сделать это для нас. Я создал минимальный пример на основе приведенного выше кода, чтобы показать это в действии:

library(shiny)
library(shinyjs)

ui <- shinyUI(fluidPage(

    useShinyjs(),

    radioButtons("radio_choose", "Choose One", choices = c("Year", "Numbers")),

    checkboxGroupInput("checkbox_years", "Year", choices = c(1995, 1996, 1997, 1997)),

    checkboxGroupInput("checkbox_numbers", "Numbers", choices = c(1, 2, 3))

))

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

    #Observe the radio buttons (runs when the radio button changes)
    observeEvent(input$radio_choose, {

        if(input$radio_choose == "Year") {

            shinyjs::show("checkbox_years")
            shinyjs::hide("checkbox_numbers")

        }

        if(input$radio_choose == "Numbers") {

            shinyjs::hide("checkbox_years")
            shinyjs::show("checkbox_numbers")

        }

    })

}

shinyApp(ui, server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...