Блестящий оценивает дважды

У меня довольно сложное приложение Shiny, и происходит что-то странное: когда я распечатываю некоторые из своих промежуточных шагов, которые выполняет приложение, все распечатывается дважды. Это означает, что все оценивается и т. Д. Дважды.

Я знаю, что, не видя программу, довольно сложно сказать, что вызывает проблему, но, возможно, кто-то сможет указать мне (на основе опыта / знаний), в чем может быть проблема.


person Stophface    schedule 19.11.2015    source источник
comment
Предлагаю вам посмотреть, как ваши реактивные выражения связаны друг с другом. Если какие-либо предыдущие зависимости изменятся, он будет повторно выполнен, что приведет к его обновлению.   -  person Pork Chop    schedule 19.11.2015
comment
Оберните код в isolate (), за исключением переменной, с которой вы хотите запускать вывод.   -  person Tonio Liebrand    schedule 19.11.2015


Ответы (2)


Как я уже упоминал в комментарии, изолировать () должна решить вашу проблему. Помимо документации 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 (), а затем просто записать переменные / входные данные, которые должны вызывать изменения до изоляции.

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)
person Tonio Liebrand    schedule 21.11.2015

Я столкнулся с той же проблемой при использовании событий brush в plotOutput. Решение оказалось resetOnNew = T при вызове plotOutput, чтобы предотвратить изменения в моем графике, вызывающие повторную оценку события кисти.

person Holger Brandl    schedule 21.08.2019