闪亮评估两次
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
以防止我的情节发生变化导致再次评估画笔事件。
我有一个相当复杂的 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
以防止我的情节发生变化导致再次评估画笔事件。