京橋のバイオインフォマティシャンの日常

まずは、データ分析、コマンドラインのメモとして

【Rのジミ〜な小技シリーズ】フォルダ・ディレクトリの作成・削除・コピー・名前変更 〜フォルダが存在しない時にだけ作成を実行する〜

R言語でのフォルダ操作(作成・削除・コピー・名前変更・移動)に関する関数について、色々とまとめてみた*1

フォルダの作成・削除について

#フォルダの存在確認
dir.exists("01_test")
#[1] FALSE  => 「01_test」というフォルダが存在していない

#フォルダの作成
dir.create("01_test")

dir.exists("01_test")
#[1] TRUE  => 「01_test」というフォルダが存在している

#フォルダの削除: フォルダを`file.remove`で削除する
file.remove("01_test")
#[1] TRUE

dir.exists("01_test")
#[1] FALSE

フォルダのコピー・フォルダ削除(file.removeで消せない時の対応)

#新たに、2つのフォルダを作成
dir.create("03_test")
dir.create("04_test")

#フォルダのコピー: フォルダを`file.copy`でコピーする
file.copy("03_test", "04_test", recursive=TRUE)

#フォルダの削除
file.remove("03_test", recursive=T)
#[1] TRUE

file.remove("04_test", recursive=T)
#[1] FALSE
# 警告メッセージ: 
# file.remove("04_test", recursive = T) で: 
#   ファイル '04_test' を削除できません、理由は 'Directory not empty' です 

#file.removeで消せない場合には、unlinkで削除する。
unlink("04_test", recursive = T)

フォルダ名を変更する

#新たに、2つのフォルダを作成
dir.create("05_test")

#フォルダ名の変更: `file.rename`でリネイムする
file.rename(from="05_test", to="06_test")

複数階層のフォルダを作成する

#これはエラーとなる
dir.create("06_test/a/b/c")
# 警告メッセージ: 
# dir.create("06_test/a/b/c") で: 
#   フォルダ '06_test/a/b/c' を作成できません、理由は 'No such file or directory' です 

#複数階層のフォルダ作成の場合には、`recursive = T`とする
dir.create("06_test/a/b/c", recursive = T)

こんな感じで、フォルダ階層が作成される。

f:id:skume:20210212192858p:plain:w500

フォルダが存在しない時にだけ、フォルダの作成を実行する

if(!dir.exists("01_test")){
    dir.create("01_test")
}

まとめ

フォルダの作成・削除・コピー・名前変更 について、R縛りで実行するコマンドをまとめてみた。

実際には、systemを使ってシェルコマンドでやる方がやりやすいのだが。。

*1:Rコマンドでのフォルダ移動は、なかなかややこしくて、また検討します