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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- source()로 스크립트 불러오기
- 주석, 스타일, 가독성
- 작업 디렉터리와 파일 경로
- R 프로젝트와 작업 공간 관리