R Academy · レッスン

source()によるスクリプトの読み込み

source()で外部Rスクリプトを実行し、複数のファイル間でコードを共有します。

レッスン 1/413 ステップ

「source()によるスクリプトの読み込み」はCoddyKit上の無料R Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはR Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 R Academyコースには全4レッスンが含まれています。

なぜ source() を使うのですか

R プロジェクトが大きくなると、すべてのコードを1つのファイルにまとめておくのは管理しにくくなります。source() 関数を使うと、外部の R スクリプトファイルを読み込んで実行できるため、作業を論理的で再利用可能なモジュールに分割できます。

これは、整理された R 開発の基盤となります。

# Imagine helpers.R contains:
# add <- function(a, b) a + b
# multiply <- function(a, b) a * b

# Load it into your main script:
source('helpers.R')

# Now use the functions defined there:
result <- add(3, 5)
cat('Result:', result)

source() の基本構文

source() の最も単純な形式では、ファイルパスだけを引数に指定します。ファイルが読み込まれ、その中のすべての式が現在の環境で評価されます。これは、コードを直接入力した場合と同じです。

# source() with a relative path (file in working directory)
source('my_functions.R')

# source() with an absolute path
source('/Users/alice/projects/utils.R')

# After sourcing, all objects and functions defined
# in the file are available in your current session
cat('Script loaded successfully')

echo パラメーター

echo パラメーターは、読み込んだファイルの各式を実行時にコンソールへ表示するかどうかを制御します。デフォルトでは echo = FALSE なので、コンソールをすっきり保てます。デバッグには TRUE を設定すると便利です。

# Default: silent loading (echo = FALSE)
source('helpers.R')

# Verbose: print each expression as it runs
source('helpers.R', echo = TRUE)

# echo = TRUE output looks like:
# > add <- function(a, b) a + b
# > multiply <- function(a, b) a * b
cat('Done')

print.eval と verbose

さらに2つのパラメーターで、出力を細かく制御できます。print.eval は式の評価結果を表示するかどうかを制御します(対話モードと同様です)。verbose を指定すると、読み込み処理自体に関する追加情報が表示されます。

# print.eval: print the VALUE of each expression
source('helpers.R', echo = TRUE, print.eval = TRUE)

# verbose: extra details like file name and line numbers
source('helpers.R', verbose = TRUE)

# Typical use: debugging a complex script
# source('complex_analysis.R', echo = TRUE, print.eval = TRUE)
cat('Parameters explored')

local パラメーター — 分離されたスコープ

デフォルトでは、source() はグローバル環境でコードを実行するため、作成されたすべてのオブジェクトがワークスペースに現れます。local = TRUE を設定すると、スクリプトが新しい分離された環境で実行され、グローバルワークスペースをきれいに保てます。

# Without local: objects pollute global env
source('data_prep.R')        # x, y, temp_df all appear in ls()

# With local = TRUE: objects stay inside
source('data_prep.R', local = TRUE)
# x, y, temp_df are NOT in your global workspace

# Verify nothing leaked:
cat('Objects in workspace:', length(ls()))

# local can also be an environment object:
my_env <- new.env()
source('data_prep.R', local = my_env)

より安全な読み込みのための sys.source()

sys.source() は、source() の一部のオーバーヘッドを省く低レベルの代替手段です。作業ディレクトリを変更せず、keepSource オプションも評価しません。パッケージ開発や内部ツールでよく使われます。

# sys.source() loads a file into a specific environment
utils_env <- new.env()
sys.source('utils.R', envir = utils_env)

# Access functions from that environment explicitly
result <- utils_env$my_helper(10)
cat('Result:', result)

# sys.source does not echo or verbose options
# It is faster and more predictable for package internals
cat('sys.source demo complete')

相対パスと絶対パス

source() で相対パスを使うと、プロジェクトの移植性が高まります。ファイルパスが現在の作業ディレクトリを基準に解決されるためです。絶対パスはどこでも機能しますが、プロジェクトを移動すると使えなくなります。プロジェクトベースのワークフローでは相対パスを優先してください。

# Relative path — resolved from getwd()
source('R/helpers.R')          # good for projects
source('scripts/utils.R')      # subfolder
source('../shared/common.R')   # parent folder

# Absolute path — fragile, machine-specific
source('/Users/alice/project/R/helpers.R')

# Check current working directory first:
cat('Working dir:', getwd())

# Best practice: use file.path() for clarity
source(file.path('R', 'helpers.R'))

複数ファイルの読み込み

source() を複数回呼び出して、複数のヘルパーファイルを読み込めます。よくあるパターンは、setup.R または _targets.R のようなエントリーポイントを1つ用意し、必要なすべてのモジュールを正しい順序で読み込む方法です。

# main.R — entry point that loads all modules
source('R/data_loading.R')
source('R/cleaning.R')
source('R/analysis.R')
source('R/plotting.R')

# Or source all .R files in a directory:
r_files <- list.files('R', pattern = '\\.R$', full.names = TRUE)
for (f in r_files) {
  source(f)
  cat('Loaded:', f, '\n')
}
cat('All modules loaded')

chdir を指定した source()

chdir パラメーターを指定すると、読み込んだファイルが存在するディレクトリに作業ディレクトリを一時的に変更して、ファイルを実行します。ヘルパースクリプトが内部で独自の相対パスを使う場合に便利です。

# Suppose scripts/analysis.R uses source('helpers.R')
# and helpers.R is also in scripts/

# Without chdir: R looks for helpers.R in YOUR working dir
source('scripts/analysis.R')          # may fail

# With chdir = TRUE: working dir shifts to scripts/ temporarily
source('scripts/analysis.R', chdir = TRUE)   # helpers.R found!

# After source() returns, working dir goes back to original
cat('Working dir restored:', getwd())

.Rprofile による起動時の読み込み

ホームディレクトリ(またはプロジェクトルート)にある .Rprofile ファイルは、R の起動時に毎回自動実行されます。このファイル内で source() を使うと、ユーティリティの読み込み、オプションの設定、パッケージのアタッチなどをセッション開始時に自動で行えます。

# .Rprofile (in ~ or project root):
# source('~/.R/my_utils.R')     # load personal helpers
# options(scipen = 999)          # no scientific notation

# To open and edit .Rprofile:
file.edit('~/.Rprofile')

# To see where .Rprofile files are looked for:
cat(Sys.getenv('R_PROFILE_USER'))

# Caution: heavy .Rprofile slows R startup
# Keep it minimal — load only what you always need
cat('.Rprofile concept shown')

実践的な source() — プロジェクトのパターン

実際のプロジェクトで使いやすいパターンは、すべてのヘルパースクリプトを R/ フォルダーに整理し、それらを読み込む run.R または main.R を1つ用意する方法です。これにより、プロジェクトの再現や共有が簡単になります。

# Project structure:
# my_project/
#   run.R             <- entry point
#   R/
#     01_load.R       <- data loading
#     02_clean.R      <- data cleaning
#     03_model.R      <- modeling
#     04_report.R     <- output

# run.R content:
cat('=== Starting analysis ===\n')
source('R/01_load.R')
source('R/02_clean.R')
source('R/03_model.R')
source('R/04_report.R')
cat('=== Analysis complete ===\n')

クイックチェック

読み込んだファイルで作成されたオブジェクトがグローバル環境に現れないようにする source() のパラメーターはどれですか。

source() — 重要なポイント

source() は、R に組み込まれたコードモジュール化の方法です:

  • source('file.R') — スクリプトをグローバル環境で読み込んで実行します
  • echo = TRUE — 各式を表示します(デバッグに便利です)
  • local = TRUE — 分離された環境で実行し、グローバルな副作用を防ぎます
  • chdir = TRUE — 作業ディレクトリをファイルの場所に一時的に移します
  • sys.source() — パッケージで使われる低レベルの代替手段です
  • 移植性のため、相対パスとプロジェクトベースのワークフローを優先します
  • .Rprofile を使って、R の起動時にヘルパーを自動で読み込みます
# Quick reference
source('R/helpers.R')                        # basic load
source('R/helpers.R', echo = TRUE)           # verbose
source('R/helpers.R', local = TRUE)          # isolated
source('scripts/run.R', chdir = TRUE)        # local paths

env <- new.env()
sys.source('R/helpers.R', envir = env)       # low-level

cat('source() mastered!')
無料で開始

AI チューターと学ぶ R — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
43
レッスン
159

よくある質問

「source()によるスクリプトの読み込み」レッスンは無料ですか?

はい。「source()によるスクリプトの読み込み」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、R Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 R Academyコースには全4レッスンが含まれています。

「source()によるスクリプトの読み込み」で何を学びますか?

source()で外部Rスクリプトを実行し、複数のファイル間でコードを共有します。 ブラウザで直接実行するハンズオンコードでR Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

R Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのR Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「source()によるスクリプトの読み込み」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このR Academyレッスンでコードを書いて実行できますか?

はい。すべてのR Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. source()によるスクリプトの読み込み
  2. コメント、スタイル、可読性
  3. 作業ディレクトリとファイルパス
  4. Rプロジェクトとワークスペース管理
← R Academyに戻る