Wie überprüfe ich das Vorhandensein einer heruntergeladenen Datei?


73

Ich habe eine R-Markdown-Datei erstellt, die mit dem Laden einer Datei aus dem Web beginnt. Ich fand den Cache = TRUE etwas flockig, daher möchte ich eine if-Bedingung einfügen, um vor dem Herunterladen nach der heruntergeladenen Datei zu suchen.

Aktueller Code - Lädt immer die Datei herunter

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")

Gewünschter Code - nur hochladen, wenn nicht bereits heruntergeladen

 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)

Welche Syntax gibt mir die Bedingung "destFile doesNotExist"

Antworten:


82

Sie können verwenden 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") 
}

Richtig, ich habe den Code beim ersten Mal nicht richtig verstanden. Sie laden die Datei jedoch nur in dem Fall, in dem sie heruntergeladen wurde, nicht in dem Fall, in dem sie bereits heruntergeladen wurde - dh es ist nicht das, wonach OP gefragt hat. Außerdem funktioniert der Code aufgrund von Tippfehlern nicht und enthält zweimal eine Zeichenfolge, die bereits in einer Variablen gespeichert ist. Was für eine dumme Gegenstimme.
Kamil S Jaron

16
file.exists(oder !file.exists) scheint hier die wahre Magie zu sein, da das OP darum gebeten hat.
Dannid

26

Gemäß der Antwort von @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
Es ist nicht erforderlich, das load(".data/samsungData.rda")in den bedingten Block aufzunehmen, da Sie es zweimal laden, wenn die Datei nicht vorhanden ist.
Hugovdberg

11

Eine einfache Möglichkeit, die Existenz einer Datei in Ihrem Arbeitsverzeichnis zu überprüfen, ist: which (list.files () == "nameoffile.csv")

Dies beantwortet seine Frage nicht genau, aber ich dachte, dies könnte für jemanden hilfreich sein, der einfach überprüfen möchte, ob sich eine bestimmte Datei in seinem Verzeichnis befindet.


1
Ich habe festgestellt, dass diese Variante Ihrer Antwort gut funktioniert. TRUE% in% (list.files () == 'nameoffile.csv') - wobei manchmal eine Ganzzahl und manchmal ein Vektor zurückgegeben wird, wobei dies immer einen Booleschen Wert zurückgibt.
Kem Mason
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.