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

Posted

技术标签:

【中文标题】R中的闪亮:单击按钮后如何将输入值设置为NULL?【英文标题】:Shiny in R: How to set an input value to NULL after clicking on a button? 【发布时间】:2016-11-15 19:39:24 【问题描述】:

我的情况如下:我有一个操作按钮(下一步)和一些单选按钮。每次,我单击操作按钮,不应该选择单选按钮和输入值,例如input$radio 应重置为 NULL(如开头那样)。 我在服务器文件中的方法如下:

observeEvent(input$Next, 
   updateRadioButtons(session, "choice", label = "", choices = list("A" = 1, "B" = 2, "C" = 3), selected = FALSE)
)

这很好用,我们称之为布局。每次我按下按钮时,之前的选择都不再显示。但是,input$choice(来自单选按钮的输入)仍然具有与以前相同的值。但是,我想将其重置为 NULL,因为我在单选按钮后面有一些条件面板,这些条件面板仅在 input$choice != null 时触发。 我非常感谢任何帮助!

【问题讨论】:

我建议您不要使用 input$choice 值,而是创建一个采用 input$choice 值的反应值。也看看isolate()function。 虽然可以有没有选择的单选按钮(通过将长度为 0 的向量传递给 selected 参数),一旦一个值我认为你不能在不刷新的情况下清除所有选择应用程序(这可能是矫枉过正) 【参考方案1】:

您可以从客户端(浏览器)端自己覆盖该值。

有一个内置函数用于将各种值分配给input 变量,称为Shiny.onInputChange。这是一个 javascript 函数,用于将数据(在浏览器中选择的内容)发送到 R 会话。这样,您可以将 null(JavaScript 等效于 R NULL)分配给您想要的 input 变量,从而“重置”它。

当然,您需要从 R 服务器触发客户端,这是由 customMessageHandler 完成的,类似于 onInputChange 的对应项。它在客户端安装了一个监听器,它可以处理您发送给客户端的消息。

您需要了解的有关这些概念的所有信息都可以在here 找到。

下面是一个简短的例子:

library(shiny)

ui <- fluidPage(
  actionButton("Next", "Next"),
  radioButtons("choice", label = "", choices = list("A" = 1, "B" = 2, "C" = 3), selected = character(0)),
  textOutput("status"),
  tags$script("
    Shiny.addCustomMessageHandler('resetValue', function(variableName) 
      Shiny.onInputChange(variableName, null);
    );
  ")
)

server <- function(input, output, session)

  output$status <- renderText(input$choice)

  observeEvent(input$Next, 
    updateRadioButtons(session, "choice", selected = character(0))
    session$sendCustomMessage(type = "resetValue", message = "choice")
  )


shinyApp(ui, server)

【讨论】:

@ K. Rohde 这看起来很棒 - 非常感谢您提供的链接,尤其是您的示例。我想知道你知道如何在 conditionalPanel 中使用状态作为条件吗? @PatrickBalada 你能更准确一点吗?您正在寻找的条件是什么?我很确定可以做到。 这非常有用。即使输入值没有改变,我们也需要强制观察事件。

以上是关于R中的闪亮:单击按钮后如何将输入值设置为NULL?的主要内容,如果未能解决你的问题,请参考以下文章

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

R闪亮:更新data.table中的选择输入值

基于选定的单选按钮选项,在闪亮的R中单击提交按钮后如何显示图表和数据?

单击按钮后如何将输入值(TKinter)传递给其他类中的函数并使用传递的值运行函数[重复]

如何在闪亮中循环观察事件?单击多边形时更改传单中的样式

r - 空文本输入()导致传单闪亮应用程序中的错误