在Shiny中动态加载文件

时间:2016-02-03 17:18:18

标签: r shiny

我正在使用Shiny来构建一个用于在本地处理某些文件的界面。我有一个包含三个.dta文件的目录。我希望用户能够选择一个文件,然后查看它。

server.R

output$choose_dta <- renderUI(selectInput('file',"Choose a file:", choices =
                                            c('file1','file2','file3')))
myData <-
  eventReactive(input$button,{
    foreign::read.dta(paste0("//my dir//",input$file,".dta"))
  })
output$table <- renderTable({
  data <- myData()
  data
})

ui.R

sidebarPanel(uiOutput('choose_dta'),actionButton('button','Load Data'))
mainPanel(tableOutput('table'))

我有几个问题。一,.dta文件很大,需要一些时间来加载。是否可以在加载数据时使页面非交互(并明确表示正在加载)?其次,更重要的是,一旦数据加载(我知道因为我从read.dta收到警告),该表永远不会呈现。如何将表设置为仅在加载数据后呈现?

亲切的问候

1 个答案:

答案 0 :(得分:2)

第一个问题:如果你知道一些CSS,你可以在页面中添加一些“masking / shield”元素(并给它一个大的zindex)。在开始阅读之前,使用shinyjs :: show()使其可见,并在阅读后使用shinyjs :: hide()将其删除。这是一种方法,可能有更好的方法。

第二个问题:如果你使用reactiveValues,它可能会更好吗?例如,像这样的东西(伪代码):

values <- reactiveValues(data = NULL)
observeEvent(input$btn, {
  data <- read.csv(file)
  values$data <- data
})
output$table <- renderTable({
  values$data()
})

尝试类似的东西