2015-07-17 5 views
0

Прямо сейчас у меня есть выражение, которое выглядит так:Блестящие - Возможны ли реактивные условия?

Вы можете запустить это непосредственно с помощью файла 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 должен быть способ сделать такие вещи ...

ответ

0

Исправление, с которым я столкнулся, состоит в том, чтобы вместо этого создать представление о среда, основанная на значении флага или целого числа. Например, если я изменяю любую из переменных в среде, я вручную изменяю реактивную переменную, которая сигнализирует о выходе приложения, которое необходимо обновить.

Смежные вопросы