【问题标题】:Shiny in R: How to set an input value to NULL after clicking on a button?R中的闪亮:单击按钮后如何将输入值设置为NULL?
【发布时间】: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 参数),一旦一个值我认为你不能在不刷新的情况下清除所有选择应用程序(这可能是矫枉过正)

标签: r shiny


【解决方案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 你能更准确一点吗?您正在寻找的条件是什么?我很确定可以做到。
  • 这非常有用。即使输入值没有改变,我们也需要强制观察事件。
猜你喜欢
  • 2014-06-19
  • 1970-01-01
  • 2017-03-03
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
  • 1970-01-01
  • 2018-11-14
  • 2019-08-14
相关资源
最近更新 更多