2016-04-08 40 views
0

我建立一個閃亮的應用程序,包括允許用戶通過CSV加載其數據或使用樣本數據集

  1. 一個fileInput用戶上傳CSV交易
  2. actionButton,讓的用戶使用預先構建的數據集測試應用程序(即無需加載自己的數據)。
  3. 一個verbatimTextOutput,打印他們使用的數據集和
  4. 各種情節和圖表的預覽內置使用他們選擇的數據集

如果用戶上傳文件,該數據集應該成爲「高手」 transactions數據集來提供應用程序的其餘部分。如果他們再點擊「加載樣本數據」按鈕,數據集應該變成「主」transactions數據集。 (外推這個想法告訴了他們之間的多次交替上傳數據,點擊按鈕)

我能得到這個工作如下:

# app.R  

library(data.table) 
library(shiny) 

# UI 
ui <- shinyUI(fluidPage(
    fileInput(inputId='fi_file', label='Choose CSV File', accept=c('text/csv', 'text/comma-separated-values,text/plain', '.csv')), 
    actionButton(inputId="ab_loadSampleTransactions", label="Load Sample Transactions"), 
    verbatimTextOutput("vto_transactions") 
)) 


# Server 
server <- shinyServer(function(input, output) { 

    # When the user uploads a file, print it 
    observeEvent(input$fi_file, { 
    transactions <- read.csv(input$fi_file$datapath) 
    output$vto_transactions <- renderPrint(transactions) 
    }) 

    # When the user clicks the button for sample transactions, print them 
    observeEvent(input$ab_loadSampleTransactions, { 
    transactions <- data.table(ID=c(1,2,3), Amount=c(100, 150, 125)) 
    output$vto_transactions <- renderPrint(transactions) 
    }) 

    # More logic involving the transactions dataset 
    # ... 

}) 

# Run the application 
shinyApp(ui = ui, server = server) 

然而,這是低效的,因爲它需要我來加載transactions數據集兩次以顯示它用它做未來的邏輯。我想我需要在這裏做一些反應,但我無法弄清楚,因爲我有兩種單獨的方法來加載數據。幫幫我?

+0

只需使用全局變量來存儲數據集,然後就可以重用它。見http://stackoverflow.com/questions/20333399/are-there-global-variables-in-r-shiny –

回答

2

不要在評論中使用像建議這樣的全局變量。使用reactiveValues。這聽起來像你不需要這個變量是「全局」的,因爲它需要與UI和其他文件共享 - 它只需要在服務器中是全局的,是正確的?在這種情況下,您可以使用reactiveValues,並且可以在服務器的任何位置訪問和設置這些變量。

相關問題