我正在使用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
收到警告),该表永远不会呈现。如何将表设置为仅在加载数据后呈现?
亲切的问候
答案 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()
})
尝试类似的东西