web-dev-qa-db-ja.com

Rのディレクトリを削除する方法は?

いくつかの調査の後、私は次のことがうまくいくことを発見しました:

_unlink("mydir")
_

再帰的に削除する場合は、recursiveオプションを使用する必要があります。

_unlink("mydir", recursive=TRUE)
_

ただし、recursiveオプションなしのunlink("mydir")のみでは、mydirにサブディレクトリが含まれる場合、出力が生成されないことに注意してください。dirsは削除されませんが、警告。ただ何も:

_> 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)などで試してみましたが、運はありませんでした。

45
fedorqui

ヘルプ?unlinkを参照してください:

成功の場合は0、失敗の場合は1、目に見えない。存在しないファイルを削除しないことは失敗ではなく、recursive = FALSEの場合にディレクトリを削除することもできません。ただし、xの欠損値は失敗と見なされます。

fooフォルダーがある場合、recursive=TRUEなしのunlink呼び出しは1を返します。

実際の動作はrm -fに似ているため、存在しないファイルのリンクを解除すると0が返されることに注意してください。

36
zw324

reallyエラーメッセージを表示する必要がある場合のラッパー関数を次に示します。

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

これにつまずく人のために、私は通常ここでシステムコマンドを使うことに頼ります。

unlinkはフォルダの内容を削除します-ただし、ルートフォルダ自体は保持します。

以下は、単純な核オプションです-フォルダを完全に削除する(多くの場合、これが必要です)-コンポーネントが簡単に見えるように書かれています:

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

単に

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