Блестящая функция сброса

avatar
user16615791
8 августа 2021 в 19:05
53
1
0

Как вставить функцию очистки экрана при нажатии кнопки reset?

Большое спасибо!

library(shiny)
library(shinythemes)

function.cl<-function(df,date,d1,d2){
  
  df <- structure(
   list(date = c("2021-01-01","2021-01-02","2021-01-03","2021-01-04","2021-01-05"),
         d1 = c(0,1,4,5,6), d2 = c(2,4,5,6,7)),class = "data.frame", row.names = c(NA, -5L))
}    
ui <- fluidPage(
  
  ui <- shiny::navbarPage(theme = shinytheme("flatly"), collapsible = TRUE,
                          br(),
                          
                          tabPanel("",
                                     sidebarLayout(
                                     sidebarPanel(
                                       
                                       selectInput("d1", label = h4("D1"),""),
                                       selectInput("d2", label = h4("D2"),""),
                                       br(),
                                       actionButton("reset", "Reset"),
                                     ),
                                     
                                     mainPanel(
                                     ))
                          )))


server <- function(input, output,session) {
  data <- reactive(function.cl())
  
  observe({
    updateSelectInput(session, "d1", label = "D1", unique(data()$d1))
    updateSelectInput(session, "d2", label = "D2", unique(data()$d2))
  })
  observeEvent(input$reset,{
  updateRadioButtons(session, "d1", selected = "")
  updateRadioButtons(session, "d2", selected = "")
  })
  
}

shinyApp(ui = ui, server = server)
Источник
MrFlick
8 августа 2021 в 19:07
0

Что именно вы хотите, чтобы кнопка «сброс» делала?

user16615791
8 августа 2021 в 19:11
0

При запуске приложения информация появляется как в selectInput. Нажав кнопку сброса, я хотел бы, чтобы эта информация была удалена.

MrFlick
8 августа 2021 в 19:14
0

Итак, вы хотите, чтобы D1 и D2 были установлены на «», даже если это недопустимый вариант в раскрывающемся списке? Потому что с помощью selectInput вы не можете выбирать элементы, которых нет в списке значений.

maydin
8 августа 2021 в 19:36
1

Я не понимаю. Вы обновили вопрос. И теперь в нем есть решение.

user16615791
8 августа 2021 в 19:38
0

Жалко Майдин. Я поправил код. Я вставил функцию для сброса. Теперь он сбрасывает значения, которые появляются на экране, пока все в порядке. Но если я посмотрю на параметры выбора selectinput, цифры все равно появятся. В этом случае я хотел, чтобы эти значения больше не появлялись.

Ответы (1)

avatar
YBS
8 августа 2021 в 19:58
0

Похоже, вы разделили вопрос. Сброс показан ниже.

ui <- fluidPage(
  
  ui <- shiny::navbarPage(theme = shinytheme("flatly"), collapsible = TRUE,
                          br(),
                          
                          tabPanel("",
                                   fileInput("file", "Please upload a file", accept = c(".xlsx")),
                                   sidebarLayout(
                                     sidebarPanel(
                                       
                                       selectInput("date", label = h4("Date"),""),
                                       selectInput("d1", label = h4("D1"),""),
                                       selectInput("d2", label = h4("D2"),""),
                                       br(),
                                       actionButton("reset", "Reset"),
                                     ),
                                     
                                     mainPanel( DTOutput("t1")
                                     ))
                          )))


server <- function(input, output, session) {
  df1 <- reactiveValues(dat=NULL)
  
  data <- eventReactive(input$file, {
    if (is.null(input$file)) return(NULL)
    df <- read_excel(input$file$datapath)
    df
  })
  
  observe({
    df1$dat <- data()
  })
  
  observeEvent(input$file, {
    
    if (!is.null(df1$dat)) {
      data <- df1$dat
      updateSelectInput(session, "date", label = "Date", unique(data$date))
      updateSelectInput(session, "d1", label = "D1", unique(data$d1))
      updateSelectInput(session, "d2", label = "D2", unique(data$d2))
    }
    
  })
  
  observeEvent(input$reset, {
    df1$dat <- NULL
    updateSelectInput(session, "date", choices=character(0), selected=character(0))
    updateSelectInput(session, "d1",  choices=character(0), selected=character(0))
    updateSelectInput(session, "d2", choices=character(0), selected=character(0))
  })
  output$t1 <- renderDT({df1$dat})
}

shinyApp(ui = ui, server = server)