2015-10-20 56 views
0

我在創建數據表和創建數據表之間存在爭用條件。有沒有辦法在顯示數據表之前確保數據表存在。 流動是創建和顯示數據表在閃亮之間的競爭條件

  1. 從列表的reactiveValues列表創建數據

  2. 顯示該新的數據


library(shiny) 
library(data.table) 
library(foreach) 
library(DT) 

ui <- fluidPage(DT::dataTableOutput("table")) 

server <- function(input, output, session) { 

    values <- reactiveValues() 

    # Adding lists dynamically 
    values[["A"]] <- list(info = 1, data = data.table(i = 1, j = 2)) 
    values[["B"]] <- list(info = 10, data = data.table(i = 10, j = 20)) 

    observe({ 
    # Update data everytime new elements are added to values 
    # This is just adding all data.tables as rows to one data.table 
    data <- rbindlist(foreach(list = reactiveValuesToList(values)) %do% list$data) 
    }) 

    output$table <- DT::renderDataTable(data) 

} 

shinyApp(ui, server) 

數據內的觀察功能,然後創建使用DT :: renderDataTable進行渲染

回答

1

data應該是反應性爲好,

observe({ 
    values$data <- rbindlist(foreach(list = reactiveValuesToList(values)) %do% list$data) 
}) 

output$table <- DT::renderDataTable(values$data) 
+0

三江源,所以這取決於reactiveValue的值不會自動使之反應。它必須特別製作爲反應性 – MySchizoBuddy

+0

是的,您只需要'<--'而不是'<< - ',因爲reactiveValues不像正常的R listsl那樣修改。 – jenesaisquoi