0Pricing
R Academy · 강의

source()로 스크립트 불러오기

source()로 외부 R 스크립트를 실행하고 여러 파일에서 코드를 공유합니다.

source()로 스크립트 불러오기은(는) CoddyKit의 무료 R Academy 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 R Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

source()를 사용하는 이유

R 프로젝트가 커지면 모든 코드를 하나의 파일에 두는 방식은 관리하기 어려워집니다. 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

두 가지 매개변수를 더 사용하면 출력을 세밀하게 제어할 수 있습니다. 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 형식의 진입점을 두는 것입니다.

# 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()를 사용하면 세션이 시작될 때마다 유틸리티를 자동으로 불러오거나 옵션을 설정하거나 packages를 연결할 수 있습니다.

# .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을 두는 것입니다. 이렇게 하면 프로젝트를 쉽게 재현하고 공유할 수 있습니다.

# 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() — 패키지에서 사용하는 저수준 대안입니다.
  • 이식성을 위해 상대 경로와 프로젝트 기반 작업 방식을 우선 사용하십시오.
  • R 시작 시 보조 파일을 자동으로 불러오려면 .Rprofile을 사용하십시오.
# 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!')

자주 묻는 질문

“source()로 스크립트 불러오기” 강의는 무료인가요?

네 — “source()로 스크립트 불러오기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 R Academy 강의 전체를 잠금 해제할 수 있습니다. R Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“source()로 스크립트 불러오기”에서 뭘 배우나요?

source()로 외부 R 스크립트를 실행하고 여러 파일에서 코드를 공유합니다. 브라우저에서 직접 실행하는 실습 코드로 R Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

R Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 R Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.

“source()로 스크립트 불러오기” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 R Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 R Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. source()로 스크립트 불러오기
  2. 주석, 스타일, 가독성
  3. 작업 디렉터리와 파일 경로
  4. R 프로젝트와 작업 공간 관리
← R Academy(으)로 돌아가기