作業ディレクトリを変更せずに R スクリプトとデータ ファイルを検索する
相対パスを使用して必要な R スクリプトとデータ ファイルを参照できるため、現在のファイルの場所を R の作業ディレクトリとして設定することがよくあります。 ただし、作業ディレクトリを変更することは理想的な解決策ではありません。
この記事では、R Studio プロジェクト、here
パッケージ、および file.path()
関数を組み合わせて、作業ディレクトリを現在のスクリプトの場所に手動で変更することなく、R がプロジェクトに必要なファイルを見つけられるようにする方法を示します。
R スタジオ プロジェクト
R Studio を使用して R プロジェクトを作成すると、指定したフォルダーに .Rproj
ファイルが作成されます。
.Rproj
ファイルを開くと、次のようになります。
- そのプロジェクト専用のワークスペースを持つ R Studio の新しいインスタンスを取得します。
.Rproj
が存在するフォルダを作業ディレクトリにします。
ただし、このプロジェクト フォルダーのサブフォルダーにある .Rmd
ファイルは、knit
の場合、一時的に作業ディレクトリをそのフォルダーに変更します。 下記の here
パッケージはこの問題を解決します。
file.path()
関数
R の基本関数 file.path()
を使用すると、必要なファイルへのパスをプラットフォームに依存しない方法で構築できます。
たとえば、ファイル mydata.csv
が datafiles
という名前のサブフォルダーにある場合、構文は次のようになります。
file.path("datafiles", "mydata.csv")
この関数は、コードを含むスクリプトが実行される OS の正しい区切り記号を使用してパスを返します。
here
パッケージ
R プロジェクトで使用する場合、here
パッケージを使用すると、すべてのファイルへのパスをメイン プロジェクト フォルダーからの相対パスとして書き込むことができます。
これは、現在のファイルの場所に相対的な .Rproj
ファイルを探すことによって実現されます。
here
パッケージを使用するには、インストールする必要があります。 ファイルが異なるユーザーまたはコンピューター間で共有されている場合は、関連するすべてのコンピューターにファイルをインストールする必要があります。
次のように、各スクリプトまたは .Rmd
ドキュメントで here
パッケージを使用します。
-
最初に、
.Rproj
ファイルを含むメイン プロジェクト フォルダに相対的な現在のファイルへのパスを使用して、here::i_am()
を呼び出します。file.path()
関数を使用して、このパスをコーディングします。 -
library(here)
でhere
パッケージをロードします。 -
here()
関数を使用して、メイン プロジェクト フォルダから必要なファイルへの相対パスを作成します。 構文はfile.path()
に似ています。ただし、
here()
は、.Rproj
ファイルの場所に関する知識を使用して、R が参照ファイルを見つけられるようにします。
例:
# Suppose the folder structure of the project is as follows.
ProjFolder
|___Scripts
| |__MyScript.R
|
|___Data
| |__MyData.csv
|
|__Documents
|__MyRMarkdown.Rmd
# In .R files. The same for .Rmd files.
# First, give the path of this script file relative to the main project folder.
here::i_am(file.path("Scripts", "MyScript.R"))
# Then, load the here package.
library(here)
# Subsequently, use the here() function whenever a path is written.
# Use a relative path from the main project folder.
myvar = read.csv2(here("Data", "MyData.csv"))
推奨されるワークフロー
.Rproj
ファイルを開いてプロジェクトを起動します。 これにより、作業ディレクトリがそのファイルを含むフォルダーに設定されます。- R Studio のファイル パネルを使用して、必要なファイルを開きます。 これにより、正しい作業ディレクトリを使用して R Studio のこの特定のインスタンスで開かれることが保証されます。
- スクリプトと
.Rmd
ファイルでは、前のセクションの手順に従ってhere
パッケージを使用します。
プロジェクト フォルダ全体は、コンピュータ上の任意の場所に置くことができます。 全体として共有でき、必要なソフトウェアがインストールされている他のコンピューターで使用できます。
here()
関数が他のパッケージと競合する場合は、構文 here::here()
を使用してください。
参考文献
R Studio プロジェクトの詳細については、R for Data Science を参照してください。
here
パッケージの詳細については、まずブログ投稿 Why should I use the here package when I'm already using projects?
を参照してください。 次に、here
のビネットを読んでください。