我试图在一个函数中提供上传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)
})
})
答案 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")