我正在建立一个由
组成的闪亮应用程序fileInput
,供用户上传交易CSV actionButton
,允许用户使用预先构建的数据集测试应用程序(即无需加载自己的数据)。verbatimTextOutput
,用于打印他们正在使用的数据集的预览和如果用户上传文件,该数据集应该成为" master" transactions
数据集用于提供应用的其余部分。然后,如果他们点击"加载样本数据"按钮, datset应该变成" master" 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 :(得分:2)
请勿使用全局变量,例如评论中的建议。
使用reactiveValues
。听起来你不需要这个变量是“全局的”,因为它需要与UI和其他文件共享 - 它只需要在服务器中是全局的,对吗?在这种情况下,您可以使用reactiveValues
,并且可以在服务器的任何位置访问和设置这些变量