闪亮评估两次

Shiny evaluates twice

我有一个相当复杂的 Shiny 应用程序,并且发生了一些奇怪的事情: 当我打印出应用程序执行的一些中间步骤时,所有内容都会打印两次。这意味着,一切都得到评估等两次。

我知道在没有看到程序的情况下很难说出问题的原因,但也许有人可以指出我(基于 experierence/knowledge)可能是什么问题。

正如我在评论中提到的,isolate() 应该可以解决您的问题。 超越 Rstudio 的文档 http://shiny.rstudio.com/articles/reactivity-overview.html 我推荐以下博客文章以获取 RStudio 文档之外的有趣信息。 https://shinydata.wordpress.com/2015/02/02/a-few-things-i-learned-about-shiny-and-reactive-programming/

简而言之,处理触发的最简单方法是将代码包装在 isolate() 中,然后只写下 variables/inputs,这应该会在 isolate 之前触发更改。

output$text <- renderText({
   input$mytext # I trigger changes
   isolate({ # No more dependencies from here on
     # do stuff with input$mytext
     # .....
     finishedtext = input$mytext
     return(finishedtext) 
   })
})

可重现的例子:

library(shiny)

ui <- fluidPage(
  textInput(inputId = "mytext", label = "I trigger changes", value = "Init"),
  textInput(inputId = "mytext2", label = "I DONT trigger changes"),
  textOutput("text")
)

server <- function(input, output, session) {
  output$text <- renderText({
    input$mytext # I trigger changes
    isolate({ # No more dependencies from here on
      input$mytext2
      # do stuff with input$mytext
      # .....
      finishedtext = input$mytext
      return(finishedtext) 
    })
  })  
}

shinyApp(ui, server)

我在 plotOutput 中使用 brush 事件时遇到了同样的问题。解决方案原来是 resetOnNew = T 调用 plotOutput 以防止我的情节发生变化导致再次评估画笔事件。