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

Pat*_*ada 4 r shiny

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

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

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

K. *_*hde 9

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

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

当然,你需要从R服务器触发客户端,这是由a完成的customMessageHandler,就像对应的那样onInputChange.它在客户端安装一个侦听器,可以处理发送给客户端的消息.

您可以在此处找到有关这些概念的所有信息.

以下是如何执行此操作的简短示例:

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)
Run Code Online (Sandbox Code Playgroud)