【问题标题】:Shiny - Are reactive environments possible?Shiny - 反应式环境可能吗?
【发布时间】:2015-07-17 02:36:08
【问题描述】:

现在,我有一个看起来像这样的表达式:

您可以使用app.R 文件直接运行它。它是独立的,并展示了我想要的效果。

library(shiny)


rval <- reactiveValues()
rval$var <- new.env()
rval$flag <- FALSE

isolate({
  rval$var$a <- 1
  rval$var$b <- "Hello"
  rval$var$c <- c(1.2, 12.3, 123.0)
  rval$var$d <- list(1,2,"A")
})

ui <- navbarPage('reactiveTest',
  tabPanel('Analysis',
    fluidRow(
      actionButton("addVar", "Add a NULL var"),
      tableOutput('vars')
    ) 
  )
)

core_variable_table <- eventReactive(rval$flag == TRUE, {
  print(ls(rval$var))
  rval$flag <- FALSE

  df <- data.frame(ls(rval$var),
                   sapply(ls(rval$var), function(x){ class(get(x, envir = rval$var))}),
                   sapply(ls(rval$var), function(x){
                     y <- head(get(x, envir = rval$var))
                     if(is.null(y)) {
                       return("NULL")
                     } else {
                       return(toString(y))
                     }
                   })
  )
  rownames(df) <- seq(1, length(ls(rval$var)))
  colnames(df) <- c('Name', 'Type', 'Content')

  return(df)
})

dothis <- function(name, data) {
  observe({
    assign(x=name,
           value=data,
           envir=rval$var)
  })

  isolate({
    rval$flag <- TRUE
  })
}

server <- function(input, output, session) {
  output$vars <- renderTable({
      return(core_variable_table())
  })

  observeEvent(input$addVar, {
    rval$update
    dothis("gecko", NULL)
  })

}

shinyApp(ui, server)

如您所见,我正在尝试将整个环境绑定为一个变量,并且如果该环境中的任何变量被修改,我希望发生更改。我如何将 Shiny 输出的反应性绑定到整个环境或该环境中的变量,而不必使用这种可怕的标志方法?

编辑:请注意,一旦我开始触发多个函数,一切都会开始崩溃。我不希望必须从一个函数中翻转 5 个标志——Shiny 应该有办法做这样的事情......

【问题讨论】:

    标签: r shiny reactive-programming


    【解决方案1】:

    我想出的解决方法是改为基于标志或整数增量生成环境视图。例如,如果我修改环境中的任何变量,我会手动更改一个反应变量,该变量会向应用程序的输出发出信号,表明它需要更新。

    【讨论】:

      猜你喜欢
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多