有光泽的:如何更新reactiveValues对象?

时间:2014-11-07 14:33:34

标签: r shiny

我有一对辅助输入,允许用户从一组选项中选择组合。此外,方便的是能够删除之前创建的项目。

对于此任务,以反应值对象listN <- reactiveValues()形式的命名列表将负责存储这些信息。

添加项目的功能就像魅力一样,但当我尝试从listN删除项目时,其项目名称将永久存在!

我的策略是使用reactiveValuesToList(),操纵其项目并将listN替换为reactiveValues()(或do.call(reactiveValues, listN_as_list)的全新实例。

我在Gist上存储了一个可重现的应用程序。我希望你们能够帮助我。如果需要,请坚持更多说明。

URL:

gist.github.com/d43e72959c4576d27535

在控制台上运行的代码:

shiny::runGist('d43e72959c4576d27535')

提前致谢!

1 个答案:

答案 0 :(得分:3)

Joe Cheng在Shiny Google Groups:

的回答
  

是的,你无法替换那样的整个reactiveValues实例   并期望任何与之前的reactiveValues绑定的东西   实例立即了解新的。上的插槽   reactiveValues实例本身是被动的,但它自己的变量是   不

     

我认为这里真正的问题是,与列表和环境不同,你不能   从reactiveValues中删除值,只将它们设置为NULL。

     

我能想到两种简单的解决方法:

     

1)除了reactiveValues实例的插槽被反应之外,还要创建变量   反应,使用makeReactiveBinding。

     

2)你也可以使用reactiveValues   像往常一样,但保持一个列表在持有的反应值   组合,没有reactiveValues本身保持值。在   换句话说,values <- reactiveValues(combos = list()),以及何时   添加了一些新内容,values$combos[[x]] <- y

     

尝试修复   上面的数字1,我​​发现当选择是长度为0的向量时,updateSelectInput无法正常工作。而不是发送0长度的矢量   客户端,它根本不发送任何选择,所以   选择永远不会改变。

     

我已经分了你的要点并添加了两个修订:一个实现   解决方法#1(以及我发现的一些其他问题),以及一个   通过使用renderUI解决updateSelectInput问题。   https://gist.github.com/jcheng5/eaedfed5095d37217fca/revisions