【发布时间】:2015-09-18 14:43:25
【问题描述】:
我的Shiny 应用程序中有一个selectizeInput。它处于多选模式,因此用户可以指定多个选择。
但是,每次添加选择时,依赖于 selectizeInput 的反应器都会被触发。假设用户打算选择A、B 和C。目前,当只需要最后一个时,我的应用程序将对A、A, B 和A, B, C 进行昂贵的计算。
我能想到的解决这个问题的最佳方法是将selectizeInput 的触发延迟一秒左右,让用户有机会输入所有选择。每个新选择都应将计时器设置回 1 秒。我知道Shiny 提供了一个invalidateLater 命令,但这会导致反应器现在和以后触发一次。
我怎样才能让响应式只稍后触发一次?
【问题讨论】:
-
你能用“Go!”吗?按钮,所以只有在用户选择了所有内容后才会触发计算?
-
这或多或少是我回答的stackoverflow.com/questions/31051133/… 的副本。简而言之,您将反应值与计时器结合起来。
-
使用操作按钮绝对是要走的路。如果您选择预定事件并且用户“放慢”速度,那么您将回到原点。
-
按照@MarkeD 和 zero323 以及 .您可以将计算存储为索引以监视哪些已经计算,并且仅在 selectizeInput 变量不是 %in% 已经计算的变量时才计算新的
-
@sdgfsdh 实际上这不是我的代码所做的。它不会像正常情况那样轮询输入。当一个输入被触发时,而不是更新输出,一个定时器被启动。如果在计时器结束之前触发了另一个输入,则重置计时器。否则,当计时器经过时,输出会更新。如果您想检查一下,请插入一些
cat或print语句并观察控制台。这似乎就是你在这里所追求的。如果不是,也许你可以详细说明。不过,总的来说,我认为按钮可能是要走的路。
标签: r timer delay shiny reactive-programming