R中有光泽:如何在单击按钮后将输入值设置为NULL?

时间:2016-07-13 09:38:16

标签: r shiny

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

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

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

1 个答案:

答案 0 :(得分:8)

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

有一个inbuild函数,用于将各种值分配给input变量,称为Shiny.onInputChange。这是一个JavaScript函数,用于将数据(在浏览器中选择的内容)发送到R会话。这样,您就可以将null(等效于R NULL的JavaScript)分配给您想要的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)