在更新几个反应依赖项后控制执行流程
|
这是一个简单而先进的问题.这是一个演练: 我有三个输入i_1,i_2,i_3,它们导致三个在不同功能中使用的无功值: I1 <- reactive({input$i_1})
I2 <- reactive({input$i_2})
I3 <- reactive({input$i_3})
具体来说,这三个值用于将图形绘制为反应性端点: output$plot <- renderPlot {(
plot( f(I1(),I2(),I3()) )
)}
闪亮的魔法工作,一切正常,直到我想加载一些数据并修改三个i_X值: observe {(
input$b_Load #Load button
[...]
updateSelectInput(session,"i_1",value = 4)
updateSelectInput(session,"i_2",value = 3)
updateSelectInput(session,"i_3",value = 5)
...
)}
更新本身工作正常,变量的三个新值将发送到客户端. 问题:然后更新这些值并逐个发送回服务器,每次不必要地重新计算图形.当所有值都更新时,我只想更新一次图表.可能吗? 我试图等待onFlushed事件: values <- reactiveValues(loadingProfile = FALSE)
session$onFlushed(function() {
values$loadingProfile <- FALSE
cat("##### DEBUG: loading Profile OFF ##############n",file = stderr())
},once = FALSE)
output$plot <- renderPlot {(
if (!values$loadingProfile) {
plot( f(I1(),I3()) )
}
)}
observe {(
input$b_Load #Load button
values$loadingProfile <- TRUE #Toggle on the watching value
cat("##### DEBUG: loading Profile ON ##############n",file = stderr())
[...]
updateSelectInput(session,value = 4)
updateSelectInput(session,value = 3)
updateSelectInput(session,value = 5)
...
)}
但它不起作用,因为每次将三个更新版本中的一个发送回服务器时刷新会话…(我在激活跟踪后检查了控制台) 什么不能正常工作: > @jdharrison建议的计数事件可能是一个很好的黑客,但在这里不起作用,因为如果updateSelectInput()的加载值与以前相同,则不会发回该值. output$plot <- renderPlot {(
plot( f(User()) )
)}
observe {(
input$b_Load #Load button
updateSelectInput(session,value = 5)
...
)}
User <- reactive({
object <- list()
object$i1 <- I1()
object$i2 <- I2()
object$i3 <- I3()
)}
f()的一个小重写. 这里,User()反应式表达式扮演缓冲区的角色.在将自己的值发送到f()之前,它将等待所有先前的更改被推送. 我已经在Github分享了我的完整Shiny项目,以获取更多信息. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
