代码之家  ›  专栏  ›  技术社区  ›  Mostafa90

使用闪亮的反应应用重置输入

  •  0
  • Mostafa90  · 技术社区  · 7 年前

    我想添加一个actionbutton来重置输入。 例如,在这里,我希望所有输入都带有“all name”、“all gender”和“all age”。。。

    我试过用shinyjs,但不幸的是没有用

    任何帮助都将不胜感激

    l <- NULL
    l$name <- c('b','e','d','b','b','d','e','e','b','b')
    l$age <- c(20,20,21,21,20,22,22,30,21,32)
    l$gender <- c('Female', 'Female', 'Male', 'Female', 'Male','Male', 
                  'Female','Male',"Female","Male")
    
    l <- as.data.frame(l)
    l$name <- as.character(l$name)
    l$age <- as.numeric(l$age)
    l$gender <- as.character(l$gender)
    
    
    library(shiny)
    server <- shinyServer(function(input,output){
    
      observeEvent(input$reset, {
        reset("Box1") 
        reset("Box2") 
        reset("Box3")
    
      })
    
      # DEfinition of all values of my variables
      assign('All Names',unique(sort(l$name)))
      assign("All Ages", unique(sort(l$age)))
      assign('All Genders', unique(sort(l$gender)))
    
    
      data1 <- reactive({
        l[which(l$name %in% if(exists(input$name))
        {get(input$name)}else{input$name}),]
      })
    
    
    
    
      data2 <- reactive(data1()[which(data1()$age %in% if(exists(input$age))
      {get(input$age)}else{input$age}),])
    
    
      data3 <- eventReactive(input$baba, {
        data2()[which(data2()$gender %in% if(exists(input$gender))
        {get(input$gender)}else{input$gender}),]
      })
    
      output$table3 <- renderTable({
        data3()
      })
    
    
      output$Box1 =  renderUI(
        if((is.null(input$age)) & (is.null(input$gender))){
          selectInput("name", "Choose Name", choices=c("All Names",unique(sort(l$name))), selected = input$name)
        } else{selectInput("name", "Choose Name", choices=c("All Names",
                                                            unique(l[l$gender %in% (if(exists(input$gender)){
                                                              get(input$gender)
                                                              }else{
                                                                input$gender}) & 
                                                                l$age %in% (if(exists(input$age)){
                                                                  get(input$age)
                                                                  }else{input$age}), "name"])), selected = input$name)
        }
      )
    
    
    
      output$Box2 =  renderUI(
        if((is.null(input$name)) & (is.null(input$gender))){
          selectInput("age", "Choose Age", choices=c("All Ages", unique(sort(l$age))), selected = input$age)
        }else{selectInput("age", "Choose Age", choices=c("All Ages",unique(l[l$gender %in% (if(exists(input$gender)){get(input$gender)}else{input$gender}) & l$name %in% (if(exists(input$name)){get(input$name)}else{input$name}) , "age"])), selected = input$age)}
      )
    
    
      output$Box3 =  renderUI(
        if((is.null(input$name)) & (is.null(input$age))){
          selectInput("gender", "Choose Gender", choices=c("All Genders", unique(sort(l$gender))), selected = input$gender)
        }else{
          selectInput("gender", "Choose Gender", choices=c("All Genders", unique(l[l$name %in% (if(exists(input$name)){get(input$name)}else{input$name}) & l$age %in% (if(exists(input$age)){get(input$age)}else{input$age}), "gender"])), selected = input$gender)
        }
      )
    
    
    
    })
    
    ui <-shinyUI(fluidPage(
      useShinyjs(),
      uiOutput("Box1"),
      uiOutput("Box2"),
      uiOutput("Box3"),
      actionButton("baba", "GO !"),
      actionButton("reset", "reset"),
      tableOutput("table3")
    ))
    
    shinyApp(ui,server)
    

    1 回复  |  直到 7 年前
        1
  •  1
  •   Mal_a    7 年前

    l <- NULL
    l$name <- c('b','e','d','b','b','d','e','e','b','b')
    l$age <- c(20,20,21,21,20,22,22,30,21,32)
    l$gender <- c('Female', 'Female', 'Male', 'Female', 'Male','Male', 
                  'Female','Male',"Female","Male")
    
    l <- as.data.frame(l)
    l$name <- as.character(l$name)
    l$age <- as.numeric(l$age)
    l$gender <- as.character(l$gender)
    
    
    library(shiny)
    library(shinyjs)
    server <- shinyServer(function(input,output){
    
      observeEvent(input$reset, {
        shinyjs::reset("name") 
        shinyjs::reset("age") 
        shinyjs::reset("gender") 
    
      })
    
      # DEfinition of all values of my variables
      assign('All Names',unique(sort(l$name)))
      assign("All Ages", unique(sort(l$age)))
      assign('All Genders', unique(sort(l$gender)))
    
    
      data1 <- reactive({
        l[which(l$name %in% if(exists(input$name))
        {get(input$name)}else{input$name}),]
      })
    
    
    
    
      data2 <- reactive(data1()[which(data1()$age %in% if(exists(input$age))
      {get(input$age)}else{input$age}),])
    
    
      data3 <- eventReactive(input$baba, {
        data2()[which(data2()$gender %in% if(exists(input$gender))
        {get(input$gender)}else{input$gender}),]
      })
    
      output$table3 <- renderTable({
        data3()
      })
    
    
      output$Box1 =  renderUI(
        if((is.null(input$age)) & (is.null(input$gender))){
          selectInput("name", "Choose Name", choices=c("All Names",unique(sort(l$name))), selected = "All Names")
        } else{selectInput("name", "Choose Name", choices=c("All Names",
                                                            unique(l[l$gender %in% (if(exists(input$gender)){
                                                              get(input$gender)
                                                            }else{
                                                              input$gender}) & 
                                                              l$age %in% (if(exists(input$age)){
                                                                get(input$age)
                                                              }else{input$age}), "name"])), selected = "All Names")
        }
      )
    
    
    
      output$Box2 =  renderUI(
        if((is.null(input$name)) & (is.null(input$gender))){
          selectInput("age", "Choose Age", choices=c("All Ages", unique(sort(l$age))), selected = "All Ages")
        }else{selectInput("age", "Choose Age", choices=c("All Ages",unique(l[l$gender %in% (if(exists(input$gender)){get(input$gender)}else{input$gender}) & l$name %in% (if(exists(input$name)){get(input$name)}else{input$name}) , "age"])), selected = "All Ages")}
      )
    
    
      output$Box3 =  renderUI(
        if((is.null(input$name)) & (is.null(input$age))){
          selectInput("gender", "Choose Gender", choices=c("All Genders", unique(sort(l$gender))), selected = "All Genders")
        }else{
          selectInput("gender", "Choose Gender", choices=c("All Genders", unique(l[l$name %in% (if(exists(input$name)){get(input$name)}else{input$name}) & l$age %in% (if(exists(input$age)){get(input$age)}else{input$age}), "gender"])), selected = "All Genders")
        }
      )
    
    
    
    })
    
    ui <-shinyUI(fluidPage(
      useShinyjs(),
      uiOutput("Box1"),
      uiOutput("Box2"),
      uiOutput("Box3"),
      actionButton("baba", "GO !"),
      actionButton("reset", "reset"),
      tableOutput("table3")
    ))
    
    shinyApp(ui,server)
    

    有两件事造成了问题,而这不是程序包 shinyjs ,而不是您的代码:

    你没有 selected selected = input$age 但不是重置为的固定值(我已将其更改为 selected = "All ages" 等)

    你应该使用 shinyjs::reset() 小部件的id ,例如在您的情况下:姓名、年龄和性别,而不是您的情况:框1、框2、框3