Прямо сейчас у меня есть выражение, которое выглядит так:Блестящие - Возможны ли реактивные условия?
Вы можете запустить это непосредственно с помощью файла 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)
Как вы можете видеть, я пытаюсь связать всю окружающую среду в качестве переменной, и я хочу, чтобы изменения происходят, если какая-либо переменная в этой среде модифицируется. Как я могу привязать реактивность блестящих выходов к целой среде или переменным в этой среде без использования этого метода ужасного флага?
Редактировать: Обратите внимание, что все начинает разваливаться, как только я начинаю запускать более одной функции. Я не хочу перебрасывать 5 флагов из одной функции - у Shiny должен быть способ сделать такие вещи ...