没有文件上传到闪亮的应用程序时使用默认的CSV文件

时间:2019-04-08 05:41:35

标签: r shiny

我有一个闪亮的应用程序,用户可以在其中上传两个csv文件-参考数据集和测试数据集。数据集在服务器代码中的反应式表达式中进行操作,然后将其输出用于生成表和图。

如果未上传参考数据集,我想使用默认参考数据集。如果未上传任何数据,如何获取我的反应表达式以返回默认数据?

我尝试在应用程序的开头加载数据(将其称为“ default.ref.data”,然后在服务器代码中使用以下代码:

ref.data=reactive({
   req(input$ref.upload)
   # read the data frame that has been uploaded
   df.ref1 <- read.csv(input$ref.upload$datapath) 

   #do some stuff

   return(df.ref1)
   if(is.null(input$files)) return(default.ref.data)
})

最后一行旨在返回没有上载任何输入文件时所读取的默认文件。这是行不通的。我该怎么办?我应该从另一个角度看吗?

1 个答案:

答案 0 :(得分:1)

类似的事情应该起作用:

library(shiny)

ui <- fluidPage(fileInput("file1", "Choose CSV File",
                          multiple = FALSE,
                          accept = c("text/csv",
                                     "text/comma-separated-values,text/plain",
                                     ".csv")), tableOutput("tbl"))

server <- function(input, output) {

  get_file_or_default <- reactive({
    if (is.null(input$file1)) {
      mtcars
    } else {
      read.csv(input$file1$datapath)
    }
  })

  output$tbl <- renderTable(get_file_or_default())
}

shinyApp(ui, server)