单击R Shiny中的按钮后将输入字段重置为null

Posted

技术标签:

【中文标题】单击R Shiny中的按钮后将输入字段重置为null【英文标题】:Resetting Input field to null after clicking button in R Shiny 【发布时间】: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()
 )

)

【问题讨论】:

【参考方案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]

以上是关于单击R Shiny中的按钮后将输入字段重置为null的主要内容,如果未能解决你的问题,请参考以下文章

在 R Shiny 中,如何使用 actionButton 重置 rhandsontable 中的数据(反转所有手动输入)?

在 Shiny 上设置“重置值”按钮

Kendo UI:单击按钮后将网格数据重置为第一页

尽管 Angular 中的表单已重置,但输入字段仍标记为红色

R中的闪亮:单击按钮后如何将输入值设置为NULL?

R Shiny:如何构建动态 UI(文本输入)