it-swarm.com.de

Wie entferne ich ein Verzeichnis in R?

Nach einigen Recherchen fand ich heraus, dass die folgenden Arbeiten funktionieren:

unlink("mydir")

und Sie müssen die Option recursive verwenden, wenn Sie rekursiv entfernen möchten:

unlink("mydir", recursive=TRUE)

Ich habe jedoch festgestellt, dass unlink("mydir") alleine ohne die Option recursive keine Ausgabe erzeugt, wenn mydir Unterverzeichnisse enthält: Es entfernt die Verzeichnisse nicht, zeigt jedoch keine Warnung an. Gar nichts:

> list.dirs()
[1] "."          "./r"
> dir.create("test")
> dir.create("test/test2")
> list.dirs()
[1] "."            "./r"   "./test"       "./test/test2"
> unlink("test")          ######### here I would expect a warning #########
> list.dirs()
[1] "."            "./r"   "./test"       "./test/test2"
> unlink("test", recursive=TRUE)
> list.dirs()
[1] "."          "./r"

Gibt es eine Möglichkeit, irgendeine Art von "Benachrichtigung" zu erhalten, wie die, die Sie in UNIX-Systemen erhalten würden?

$ rmdir test
rmdir: failed to remove «test»: Directory not empty

Ich verwende die R-Version 3.1.2 (2014-10-31). Ich habe versucht, mit options(warn=1) etc zu spielen, aber kein Glück.

33
fedorqui

Siehe Hilfe ?unlink:

Wert

0 für Erfolg, 1 für Fehler, unsichtbar. Löschen eines nicht vorhandenen Die Datei ist kein Fehler und kann ein Verzeichnis nicht löschen, wenn rekursiv = FALSCH. Fehlende Werte in x werden jedoch als .__ betrachtet. Misserfolge.

Falls es einen Ordner foo gibt, gibt der Aufruf unlink ohne recursive=TRUE1 zurück.

Beachten Sie, dass das Verhalten eigentlich rm -f ist, was bedeutet, dass das Aufheben der Verknüpfung einer nicht vorhandenen Datei 0 zurückgibt.

31
Ziyao Wei

Hier ist eine Wrapper-Funktion für Sie, wenn Sie really eine Fehlermeldung msg sehen müssen:

.unlink <- function(x, recursive = FALSE, force = FALSE) {
  if (unlink(x, recursive, force) == 0)
    return(invisible(TRUE))
  stop(sprintf("Failed to remove [%s]", x))
}
5
hrbrmstr

Für diejenigen, die darauf stolpern, verwende ich normalerweise den Systembefehl.

durch Aufheben der Verknüpfung wird der Ordnerinhalt entfernt. Der Stammordner bleibt jedoch erhalten.

Das Folgende ist die einfache Nuklearoption - das Löschen des Ordners in seiner Gesamtheit (was ich häufig benötige) - die so geschrieben ist, dass Sie die Komponenten leicht sehen:

Loc <- "mydir"
system(paste0("rm -r ", Loc))
0
Nick

Einfach

unlink("mydir") # will delete directory called 'mydir'
0
user5783745