我的情况如下:我有一个动作按钮(下一个)和一些单选按钮。每次,我点击动作按钮,不应该选择单选按钮和输入值,例如input $ radio应重置为NULL(如开头)。 我在服务器文件中的方法如下:
observeEvent(input$Next, {
updateRadioButtons(session, "choice", label = "", choices = list("A" = 1, "B" = 2, "C" = 3), selected = FALSE)
})
这适用于我们称之为布局。每次按下按钮,都不再显示之前的选择。但是,输入$选项(从单选按钮输入)仍然具有与之前相同的值。但是,我想将它重置为NULL,因为我在单选按钮后面有一些条件面板,只有在输入$ choice!= null时才触发。 我非常感谢任何帮助!
答案 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)