使用trycatch块读取csv和excel文件

时间:2015-05-11 20:28:44

标签: r excel csv shiny shiny-server

我试图在一个函数中提供上传csv和excel表格的两个选项。我正在使用read.csv从XLConnect包读取csv文件和readworksheetfromfile来读取excel文件。我正在使用trycatch块,但是当在readworksheetfromfile函数上传递csv文件时仍然会出错。我的tryblock看起来像

filedata <- reactive({
infile <- input$templatedfile
if (is.null(infile)) {
  # User has not uploaded a file yet
  return(NULL)
} 

importedfile = tryCatch({
  read.csv(infile$datapath,stringsAsFactors=FALSE)
},  finally = {
  readWorksheetFromFile(infile$datapath,sheet=1,check.names=FALSE)
})
})

1 个答案:

答案 0 :(得分:0)

我认为您实际上最好是实施switch声明。这样你就不会浪费计算时间来尝试将文件作为csv读取。如果有人上传既不是csv文件也不是excel文件的文件,你也可能需要一个后退选项。以下是filedata函数的实现。

filedata <- reactive({
    infile <- input$templatedfile
    if(is.null(infile)){
        return(NULL)
    }
    ext <- file_ext(infile$name)

    importedfile <- 
        switch(ext,
               csv = read.csv(infile$datapath, stringsAsFactors=FALSE),
               xlsx = , xls = readWorksheetFromFile(infile$datapath,
                                                    sheet=1,
                                                    check.names=FALSE),
               stop("file extension not recognized"))
})

这是一个简单的要点,我用它来验证它是否正常工作。

runGist("https://gist.github.com/cdeterman/a41cceadffa7907c505e")