【发布时间】: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