2016-04-08 35 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,并且可以在服务器的任何位置访问和设置这些变量。

相关问题