Подтвердить что ты не робот

Как удалить каталог в R?

После некоторых исследований выяснилось, что следующие работы:

unlink("mydir")

и вы должны использовать опцию recursive, если вы хотите удалить рекурсивно:

unlink("mydir", recursive=TRUE)

Однако я заметил, что unlink("mydir") один, без опции recursive, не производит никакого вывода, когда mydir содержит подкаталоги: он не удаляет директории, но не показывает никаких предупреждений. Просто ничего:

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

Есть ли способ получить какое-либо "уведомление", подобное тому, которое вы получите в системах UNIX?

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

Я использую R версию 3.1.2 (2014-10-31). Я пробовал играть с options(warn=1) и т.д., Но не повезло.

4b9b3361

Ответ 1

См. справку ?unlink:

Значение

0 для успеха, 1 для отказа, невидимо. Не удалять несуществующие файл не является отказом и не может удалить каталог, если рекурсивный = ЛОЖЬ. Однако недостающие значения в x рассматриваются как неудачи.

В случае, если есть папка foo, вызов unlink без recursive=TRUE вернет 1.

Обратите внимание, что на самом деле поведение больше похоже на rm -f, что означает, что отмена несуществующего файла вернет 0.

Ответ 2

Здесь вам нужна функция обертки, если вам действительно нужно увидеть сообщение об ошибке:

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

Ответ 3

Для тех, кто спотыкается об этом, я обычно прибегаю к использованию здесь системных команд.

unlink удалит содержимое папки, но оставит корневую папку самой.

Ниже приведен простой ядерный вариант - полное удаление папки (что часто требуется), написанный так, чтобы вы могли легко видеть компоненты:

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

Ответ 4

Просто

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