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

南国のビーチパラソルの下で、Rプログラムを打ってる日常を求めて、、Daily Life of Bioinformatician in Kyobashi of Osaka

【Rのジミ〜な小技シリーズ】意外と分からない、ファイルを別ディレクトリに移動させる操作関数篇: filesstringsパッケージ

はじめに

過去に、R環境から行う、 フォルダの基本操作(作成・削除・コピー・名前変更・移動)について纏め記事を書きました。

skume.net

この続編的な内容で、ファイルを別ディレクトリに移動させる話となります。

Baseパッケージには適当な関数*1が用意されていないので、 便利なファイル・文字列操作ツールである、filesstringsパッケージ内の関数を使っています。

このfilesstringsパッケージは、 当初、ファイルや文字列を操作するためのパッケージとしてスタートしました。 その後、fsファイル操作パッケージとstrex文字列操作パッケージが出現し これらパッケージが提供していた機能も提供するようになっています。

そのため、これらのパッケージはfilesstringsパッケージの機能をほとんど消滅に追いやったと言われますが、 このパッケージはユニークで便利なファイル操作関数をいくつか内在しています。

今回、filesstringsパッケージのファイル操作関数を紹介します。

とあるディレクトリとファイル構成について

まずは、例題として扱う、ディレクトリとファイル構成を概説します。

#テストディレクトリ移動
setwd("./test")

#フォルダ・ファイルの表示
list.files(recursive = F)
#[1] "test_A"     "test_B.txt" "test_C.txt" "test_D.txt"

架空のフォルダ・ファイル構成として、 testというディレクトリに入ると、そこには、 test_Aというフォルダ、またtest_B.txtなどのファイルがあると仮定します。

例題として、test_Aというあるフォルダに、 test_Btest_C.txtとかのファイルを移動させます。

 

まずは、filesstringsパッケージをインストールする

install.packages関数で、パッケージのインストールを行います。

#filesstringsのインストール
install.packages("filesstrings")
library(filesstrings)

ファイルを移動させる関数群

ファイルを移動させる関数*2には、move_files関数とfile.move関数があります。

以下の通り、move_filesとfile.moveは、全く同じ使い方です。

#move_filesを使う場合
filesstrings::move_files(files="test_B.txt", 
                         destinations="test_A",
                         overwrite = FALSE)
#1 files moved. 0 failed.

#file.moveを使う場合
filesstrings::file.move(files="test_C.txt", 
                        destinations="test_A",
                        overwrite = FALSE)
#1 files moved. 0 failed.

この関数では、

  • files: 移動するファイル/フォルダの文字ベクトル(相対パスまたは絶対パス)。
  • destinations: ファイルを移動させる先のディレクトリの文字ベクトル.
  • overwrite: ファイルの上書きを許可するか?デフォルトは「FALSE」。

が引数として指定できます。

同時に、N個のものを移動させる場合

#両ファイルをベクトルの変数に入れる
Files <- c("test_B.txt", "test_C.txt")
#OR dir関数を使う
#Files <- dir("test_A", pattern = "txt")

#file.moveを使う場合
filesstrings::file.move(files=paste0("./test_A/", Files), 
                        destinations="../test",
                        overwrite = FALSE)
#2 files moved. 0 failed.

 

これを実行すると、元のファイル構成に戻っています。

つまりは、filesの引数に文字列ベクトルを与えることで、複数のファイルを同時に移動させられます。

まとめ

filesstringsパッケージは時々重宝します。

参考資料

github.com

*1:リネイムとかはあるが

*2:つまりは、指定したファイルを指定したディレクトリに移動する関数である。