R 在有反应应用程序的情况下重置输入

R 在有反应应用程序的情况下重置输入,r,shiny,shinyjs,R,Shiny,Shinyjs,我想添加一个actionbutton来重置我的输入。 例如,这里,我希望所有输入都包含所有姓名、所有性别和所有年龄 我试过用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',

我想添加一个actionbutton来重置我的输入。 例如,这里,我希望所有输入都包含所有姓名、所有性别和所有年龄

我试过用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)

以下是适用于您的代码:

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=input$age但没有重置为的固定值i已将其更改为selected=All ages,等等


二,。您应该将shinyjs::reset函数与小部件的id一起使用,例如,在您的示例中:姓名、年龄和性别,而不是您所拥有的:Box1、Box2、Box3

您可以将该功能硬编码为shiny::updateSelectInput。顺便说一句,我强烈建议您不要指定“所有名称”,uniquesortl$name中给出的答案避免使用shinyjs谢谢您的答案第一次尝试似乎效果不错,但第二次尝试时,我尝试了两次。。当我选择一个特定的inputHi@DimitriPetrenko时,我已经检查了代码,是的,你是对的,我发现问题出在$Box代码的输出端