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中单击提交按钮后如何显示图表和数据?