【问题标题】:Resetting Input field to null after clicking button in R Shiny单击R Shiny中的按钮后将输入字段重置为null
【发布时间】:2014-06-19 09:22:09
【问题描述】:

我正在构建一个应用程序,用户可以在其中逐列输入数据值。单击添加按钮后,输入的值将按列附加到现有值。例如 如果输入 col1、2、3 并单击 ADD,我们将在显示中显示

col1
   2
   3

如果输入 col2、4、7 并单击 ADD,我们就有了显示

col1 col2
   2    4
   3    7

等等

我希望当单击添加按钮时,输入字段被清除以允许输入新列。请在下面找到 ui 和服务器的代码。输出表也无法正确显示,如果您能帮助解决这个问题,我们将不胜感激。

ui.R

shinyUI(pageWithSidebar(
headerPanel("My data table"),
sidebarPanel(h5("Enter input"),
           textInput("colname","Enter Column Name",NA),
           numericInput("x","X",NA),
           numericInput("y","Y",NA),
           br(),
           actionButton("Add","ADD")),
mainPanel(verbatimTextOutput("out"))
))

还有

server.R

shinyServer(function(input,output){

myTable <- reactive({
if(input$Add > 0)
  return(isolate({
    colnm <- input$colname
    x <- input$x
    y <-  input$y
    result <- data.frame(rbind(colnm,x,y))
    result
  }))
})

output$out <- renderTable({
myTable()
 })

})

【问题讨论】:

    标签: r user-interface dataframe shiny


    【解决方案1】:

    需要使用renderTable 而不是verbatimTextOutput 呈现表格。我猜你想保留旧的输入。一种方法是使用reactiveValues。编辑:我没有看到你想重置输入。要重置输入,请使用 updateNumericInputupdateTextInput 函数。您还需要将 session 变量传递给您的 server 函数。

    runApp(
      list(ui = pageWithSidebar(
        headerPanel("My data table"),
        sidebarPanel(h5("Enter input"),
                     textInput("colname","Enter Column Name",NA),
                     numericInput("x","X",NA),
                     numericInput("y","Y",NA),
                     br(),
                     actionButton("Add","ADD")),
        mainPanel(tableOutput("out"))
      ),
    
      server = function(input,output,session){
        myValues <- reactiveValues()
    
        observe({
          if(input$Add > 0){
            isolate({
              colnm <- input$colname
              x <- input$x
              y <-  input$y
              if(!is.null(myValues$myDf)){
                myValues$myDf <- cbind(myValues$myDf, 
                                       data.frame(setNames(list(c(x, y)), colnm))
                )
              }else{
                myValues$myDf <- data.frame(setNames(list(c(x, y)), colnm))
              }
    
            })
            updateNumericInput(session, "x","X", NA)
            updateNumericInput(session, "y","Y", NA)
            updateTextInput(session, "colname","Enter Column Name",NA)
          }
        })
    
        output$out <- renderTable({
          myValues$myDf
        })
    
      })
    )
    

    编辑:

    你可以改成

        updateNumericInput(session, "x","X", 3)
        updateNumericInput(session, "y","Y", 5)
        updateTextInput(session, "colname","Enter Column Name",'Default NAME')
    

    它有效。现在值更改为默认值 3,5 和“默认名称”

    【讨论】:

    • 我很感兴趣,不知道可以在单个文件中运行应用程序,好主意。我不清楚 NA 在更新数字和文本输入功能中代表什么。我猜这是什么将字段设置为清空或清除字段?此外,我尝试将 NA 更改为 NA 以外的值,但应用程序挂起并且不返回表或添加列,请问这可能是什么原因?
    • NA 表示空值。您可以将数字 NA 更改为数字,将文本更改为字符,它可以工作。
    • 我确实更改了 NA 值,但是当我单击添加时,它没有显示任何内容。另外,我必须使用观察功能吗?如果是这样,为什么?我一直在使用没有观察功能的操作按钮。它到底有什么作用?
    • 请记住,更改不是即时的:“消息是在所有观察者(包括输出)完成运行后收集和发送的。” [shiny.rstudio.com/reference/shiny/0.14/updateTextInput.html]
    猜你喜欢
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 2021-09-29
    • 2021-07-21
    • 2021-01-25
    • 1970-01-01
    • 2022-10-14
    相关资源
    最近更新 更多