【问题标题】:How to resetform after selection in ShinyR?在 Shiny R 中选择后如何重置表单?
【发布时间】:2019-11-29 07:55:48
【问题描述】:

这个问题是this question 的扩展。我想将此应用程序带到下一步,在选择“系统”后,用户应该能够单击“重置表单”按钮,这将清除“选择系统”中选择的“系统”并清除显示的输出在mainpanel。我能够完全重置所选选项。但是,我无法清除数据表。

请提供代码解释。

清除所选输入的代码...

df <- data.frame("Users" =c('A',"B","A",'C','B'), "Date" = c('17 Mar 2019','15 Mar 2019','11 Mar 2019','20 Apr 2019',"21 Apr 2019"), "Systems" = c("Sys1", "Sys1","Sys2","Sys3","Sys4"), stringsAsFactors = FALSE)
df
library(shiny)
library(DT)
library(dplyr)

resetForm<-function(session){
  updateSelectInput(session,"slct",selected = 'Null')
  }


ui <- basicPage(
  h2("Different Systems"),
  sidebarLayout(
    sidebarPanel(
      selectInput('slct',"Select System",choices = df$Systems),
      actionButton('clear',"Reset Form")
  ),
  mainPanel(
  DT::dataTableOutput("mytable")
)
)
)
server <- function(input, output,session) {
  #df$system<-rownames(df$Systems)
  output$mytable = DT::renderDataTable({
    req(input$slct) # add this line
    df %>%
      filter(stringr::str_detect(Systems, as.character(input$slct)))
  })
  observeEvent(input$clear,{
    req(input$slct)
    resetForm(session)

  })
}

shinyApp(ui, server)

【问题讨论】:

    标签: r shiny shiny-server shinyapps


    【解决方案1】:

    selectInput中有两部分:

    1. UI 上显示的文本。
    2. 传递给服务器的值

    这两个值可以相同或不同,具体取决于提供给choices 的内容。

    通过设置updateSelectInput(session,"slct",selected = 'Null'),将选中的值设置为'Null',但是'Null'choices中没有提供,所以在UI中会显示为空白。

    结果是:您提供的东西不在choicesSelectInput 中,不会将值传递给服务器。所以input$slct 保持不变。

    要确认,您可以尝试:

    在您的服务器代码中的resetForm(session) 之后添加print(input$slct)。你应该会发现resetForm() 不能重置input$slct

    回答您的问题:

    1. resetForm() 函数更改为:

    您应该使用"",因为它非常特别。它被视为一个选项,但不会显示在 UI 中。

    resetForm<-function(session){
        updateSelectInput(session,"slct",selected = "")
    }
    
    1. selectInput中修改choices
    # Change choices to c("",df$Systems)
    selectInput('slct',"Select System",choices = c("",df$Systems)),
    

    以下脚本应该可以工作:

    df <- data.frame("Users" =c('A',"B","A",'C','B'), "Date" = c('17 Mar 2019','15 Mar 2019','11 Mar 2019','20 Apr 2019',"21 Apr 2019"), "Systems" = c("Sys1", "Sys1","Sys2","Sys3","Sys4"), stringsAsFactors = FALSE)
    df
    library(shiny)
    library(DT)
    library(dplyr)
    
    resetForm<-function(session){
        updateSelectInput(session,"slct",selected = '')
    }
    
    
    ui <- basicPage(
        h2("Different Systems"),
        sidebarLayout(
            sidebarPanel(
                selectInput('slct',"Select System",choices = c("",df$Systems)),
                actionButton('clear',"Reset Form")
            ),
            mainPanel(
                DT::dataTableOutput("mytable")
            )
        )
    )
    server <- function(input, output,session) {
        #df$system<-rownames(df$Systems)
        output$mytable = DT::renderDataTable({
            req(input$slct) # add this line
            df %>%
                filter(stringr::str_detect(Systems, as.character(input$slct)))
        })
        observeEvent(input$clear,{
            req(input$slct)
            resetForm(session)
        })
    }
    
    shinyApp(ui, server)
    

    【讨论】:

      猜你喜欢
      • 2015-09-13
      • 2023-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-14
      • 1970-01-01
      • 2017-12-31
      • 2021-10-13
      相关资源
      最近更新 更多