Наблюдать за изменениями в объектах класса R6 (data.tree) - PullRequest
0 голосов
/ 28 октября 2019

Я использую пакет data.tree в блестящем приложении и хотел бы зафиксировать изменения объекта, используя shiny::observeEvent(). Однако, похоже, что эти изменения не вызывают события обычным способом. Пожалуйста, посмотрите следующий пример:

library(shiny)
library(data.tree)
data("acme")

app <- shinyApp(
  ui = shinyUI(
    fluidPage(
      actionButton("tree_add", "Add")
    ) 
  ),
  server = shinyServer(function(input, output) {


    rv <- reactiveValues(
     tree = acme,
     list = list(a = c(1,2), b = c(2,4))
    )


    observeEvent(input$tree_add, {
      rv$tree$AddChild(as.character(round(runif(1, 1, 1000))))
      rv$list <- c(rv$list, "z" = c(2,42))
    })

    observeEvent(rv$tree, {
      print("thing added to TREE")
    })

    observeEvent(rv$list, {
      print("thing added to LIST")
    })

}
))

Кнопка действия изменяет как объект data.tree, так и обычный список. В то время как observeEvent(rv$list) реагирует, как и ожидалось, прослушиватель для дерева данных хранит молчание. Я также пытался прослушать rv$tree$totalCount, но, опять же, ни одно событие не вызывается. Я бы предположил, что это может быть проблемой и с другими R6 объектами (?).

Короче говоря: Как я могу наблюдать изменения в R6 объектов / data.tree с блестящими (желательно сохраненными)как reactiveValues()? Спасибо!

...