作業ディレクトリを変更せずに R スクリプトとデータ ファイルを検索する

Jesse John 2023年6月21日
  1. R スタジオ プロジェクト
  2. file.path() 関数
  3. here パッケージ
  4. 推奨されるワークフロー
作業ディレクトリを変更せずに R スクリプトとデータ ファイルを検索する

相対パスを使用して必要な R スクリプトとデータ ファイルを参照できるため、現在のファイルの場所を R の作業ディレクトリとして設定することがよくあります。 ただし、作業ディレクトリを変更することは理想的な解決策ではありません。

この記事では、R Studio プロジェクト、here パッケージ、および file.path() 関数を組み合わせて、作業ディレクトリを現在のスクリプトの場所に手動で変更することなく、R がプロジェクトに必要なファイルを見つけられるようにする方法を示します。

R スタジオ プロジェクト

R Studio を使用して R プロジェクトを作成すると、指定したフォルダーに .Rproj ファイルが作成されます。

.Rproj ファイルを開くと、次のようになります。

  1. そのプロジェクト専用のワークスペースを持つ R Studio の新しいインスタンスを取得します。
  2. .Rprojが存在するフォルダを作業ディレクトリにします。

ただし、このプロジェクト フォルダーのサブフォルダーにある .Rmd ファイルは、knit の場合、一時的に作業ディレクトリをそのフォルダーに変更します。 下記の here パッケージはこの問題を解決します。

file.path() 関数

R の基本関数 file.path() を使用すると、必要なファイルへのパスをプラットフォームに依存しない方法で構築できます。

たとえば、ファイル mydata.csvdatafiles という名前のサブフォルダーにある場合、構文は次のようになります。

file.path("datafiles", "mydata.csv")

この関数は、コードを含むスクリプトが実行される OS の正しい区切り記号を使用してパスを返します。

here パッケージ

R プロジェクトで使用する場合、here パッケージを使用すると、すべてのファイルへのパスをメイン プロジェクト フォルダーからの相対パスとして書き込むことができます。

これは、現在のファイルの場所に相対的な .Rproj ファイルを探すことによって実現されます。

here パッケージを使用するには、インストールする必要があります。 ファイルが異なるユーザーまたはコンピューター間で共有されている場合は、関連するすべてのコンピューターにファイルをインストールする必要があります。

次のように、各スクリプトまたは .Rmd ドキュメントで here パッケージを使用します。

  1. 最初に、.Rproj ファイルを含むメイン プロジェクト フォルダに相対的な現在のファイルへのパスを使用して、here::i_am() を呼び出します。 file.path() 関数を使用して、このパスをコーディングします。

  2. library(here)here パッケージをロードします。

  3. 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"))

推奨されるワークフロー

  1. .Rproj ファイルを開いてプロジェクトを起動します。 これにより、作業ディレクトリがそのファイルを含むフォルダーに設定されます。
  2. R Studio のファイル パネルを使用して、必要なファイルを開きます。 これにより、正しい作業ディレクトリを使用して R Studio のこの特定のインスタンスで開かれることが保証されます。
  3. スクリプトと .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 のビネットを読んでください。

著者: Jesse John
Jesse John avatar Jesse John avatar

Jesse is passionate about data analysis and visualization. He uses the R statistical programming language for all aspects of his work.