如何检查下载文件的存在


73

我创建了一个R markdown文件,该文件首先从网络上加载文件。我发现cache = TRUE有点不稳定,因此我想在下载之前先设置if条件来检查下载的文件。

当前代码-始终下载文件

fileURL <- "https://dl.dropbox.com/u/7710864/courseraPublic/samsungData.rda"
setInternet2(TRUE)
download.file(fileURL ,destfile="./data/samsungData.rda",method="auto")
load("./data/samsungData.rda")

所需代码-仅在尚未下载时上传

 destfile="./data/samsungData.rda"    
 fileURL <-
 "https://dl.dropbox.com/u/7710864/courseraPublic/samsungData.rda"   
 if (destFile doesNotExist) {
    setInternet2(TRUE)
    download.file(fileURL ,destfile,method="auto") }
    load("./data/samsungData.rda")
 }
 load(destfile)

什么语法会给我条件“ destFile didNotExist”

Answers:


82

您可以使用 tryCatch

  if(!file.exists(destfile)){
    res <- tryCatch(download.file(fileURL,
                              destfile="./data/samsungData.rda",
                              method="auto"),
                error=function(e) 1)
    if(dat!=1) load("./data/samsungData.rda") 
}

是的,我第一次没有得到正确的代码。但是,仅在下载文件的情况下才加载文件,而不是在已经下载文件的情况下才加载文件-也就是说,这不是OP所要求的。另外,由于输入错误,代码无法正常工作,并且包含两次已保存在变量中的字符串。真是愚蠢的下投。
卡米尔·S·加伦'18

16
file.exists(或!file.exists)似乎是这里的真正魔力,因为这就是OP所要求的。
丹妮德

dat做什么
not2qubit

26

根据@agstudy给出的答案

 destfile="./data/samsungData.rda" 
 fileURL <-
 "https://dl.dropbox.com/u/7710864/courseraPublic/samsungData.rda"   
 if (!file.exists(destfile)) {
    setInternet2(TRUE)
    download.file(fileURL ,destfile,method="auto") }
    load("./data/samsungData.rda")
 }
 load(destfile)

7
不需要load(".data/samsungData.rda")在条件块中包含,因为如果文件不存在,则将其加载两次。
hugovdberg

11

一种检查工作目录中文件是否存在的简单方法是:which(list.files()==“ nameoffile.csv”)

这不能完全回答他的问题,但是我认为这对那些只想检查目录中是否存在特定文件的人可能会有所帮助。


1
我发现您的答案的这种变体可以很好地实现TRUE%in%(list.files()=='nameoffile.csv')-使用该变量有时返回一个整数,有时返回一个向量,其中总是返回一个布尔值。
Kem Mason
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.