R을 쓰는 두 가지 방식: 콘솔과 스크립트
R에는 대화형 콘솔(REPL, 즉 읽고 평가하고 출력하고 반복하는 구조)이 있습니다. 표현식을 입력하면 R이 즉시 답합니다. 터미널에서 R을 입력하거나 RStudio의 아래쪽 창을 보면 > 프롬프트가 나타나고, Enter를 누르는 순간 모든 줄이 실행됩니다. 콘솔은 탐색하는 곳입니다. 데이터를 들여다보고, 한 줄을 시험해 보고, 결과를 확인합니다.
R 스크립트는 .R 확장자로 저장한 R 코드 텍스트 파일일 뿐입니다. 분석이 살아 있는 곳이자, 누구든(미래의 자신을 포함해) 위에서 아래로 실행하면 같은 결과를 얻는 재현 가능한 레시피입니다.
스크립트는 별난 것이 아닙니다. 아래는 완결된 스크립트 하나입니다. 실행해 보세요.
아래 내용은 모두 이런 파일을 R에 전달하는 여러 방법에 관한 것입니다.
Rscript: 명령줄에서 파일 실행하기
R은 정확히 이 목적을 위해 만들어진 Rscript라는 명령줄 도구를 함께 설치합니다. 파일이 있는 폴더에서 터미널을 열고 다음을 실행합니다.
Rscript summary.R
R이 시작되어 파일을 처음부터 끝까지 실행하고, 스크립트가 출력하는 내용을 보여 준 뒤 종료합니다. cron 작업, 데이터 파이프라인, 서버, CI 등 사람이 지켜보지 않는 곳에서 코드를 돌리는 자동화의 주력 도구입니다.
한 가지 동작은 누구나 한 번은 놀랍니다. 콘솔에서는 avg처럼 표현식만 입력해도 값이 자동으로 출력됩니다. 하지만 Rscript에서는 함수나 반복문 안의 단독 표현식이 아무것도 출력하지 않을 수 있습니다. 그래서 스크립트에서는 cat()이나 print()를 명시적으로 호출해 의도를 드러냅니다. 이 습관을 일찍 들이세요.
source(): R 안에서 파일 실행하기
이미 R 세션에 들어와 있는데 파일을 실행하고 싶다면 source()를 씁니다.
source("summary.R")
파일의 모든 줄이 현재 세션에서 실행되고, 스크립트가 정의한 변수와 함수는 이후에도 남아 있습니다. 바로 그것이 요점입니다. source()는 직접 만든 보조 함수를 대화형 세션으로 불러오는 방법입니다.
기본적으로 source()는 명시적인 출력을 제외하면 조용히 실행됩니다. 동작을 눈으로 보고 싶다면 실행되는 각 줄을 함께 출력하게 하세요.
source("summary.R", echo = TRUE)
상대 경로에 주의하세요. "summary.R"은 "현재 작업 디렉터리 안에서"라는 뜻이고, 그 위치는 R을 어떻게 시작했는지에 따라 달라집니다. source()나 read.csv()가 바로 거기 있는 파일을 알 수 없다는 듯 찾지 못한다면, 원인은 거의 항상 작업 디렉터리입니다. 작업 디렉터리를 참고하세요.
RStudio에서 스크립트 실행하기
RStudio는 두 가지 명령으로 두 가지 방식을 모두 제공하며, 이 구분은 몸에 익혀 둘 만합니다.
- Run(Ctrl+Enter, macOS에서는 Cmd+Enter) - 현재 줄이나 선택한 영역을 콘솔에서 실행합니다. 탐색용 기어입니다. 한 줄 쓰고, 실행하고, 보고, 조정합니다.
- Source(Source 버튼 또는 Ctrl/Cmd+Shift+S) - 콘솔에서
source()를 실행하는 것과 똑같이 파일 전체를 실행합니다.
한 줄씩 Run 하는 방식의 함정은 콘솔 세션에 상태가 쌓인다는 점입니다. 나중에 고치거나 지운 줄에서 만든 변수가 여전히 살아 있기 때문에, 스크립트가 여러분에게는 "동작"하지만 다른 사람에게는 실패합니다. 스크립트를 정직하게 시험하는 방법은 새 세션에서 Source 하는 것입니다(Session → Restart R 후 Source). 그것을 통과하면 재현 가능한 스크립트입니다.
스크립트를 실행 파일로 만들기 (macOS / Linux)
유닉스 계열 시스템에서는 R 스크립트를 그 자체로 하나의 명령처럼 만들 수 있습니다. 파일 맨 위에 셔뱅(shebang) 줄을 넣으세요.
#!/usr/bin/env Rscript
cat("I am a self-running R script\n")
그런 다음 한 번만 실행 권한을 주고 바로 실행합니다.
chmod +x summary.R
./summary.R
셔뱅은 어떤 인터프리터가 파일을 실행할지 셸에 알려 줍니다. env Rscript는 해당 컴퓨터의 PATH 어디에 있든 Rscript를 찾아 줍니다. 이 줄은 #로 시작하므로 R 자신은 주석으로 읽고 무시합니다.
스크립트에 인자 전달하기
실제 스크립트는 파일 이름, 날짜, 임계값 같은 입력을 받습니다. 스크립트 이름 뒤에 붙여 전달합니다.
Rscript report.R sales.csv 2026
스크립트 안에서 commandArgs(trailingOnly = TRUE)는 전달된 인자를 문자 벡터로 돌려줍니다(trailingOnly = TRUE는 인터프리터 자체의 내부 인자를 버립니다. 사실상 항상 필요한 옵션입니다).
# report.R
args <- commandArgs(trailingOnly = TRUE)
input_file <- args[1]
year <- as.numeric(args[2])
cat("Reading:", input_file, "\n")
cat("Filtering to year:", year, "\n")
모든 값은 2026이 아니라 "2026"처럼 문자열로 들어오므로, 계산하기 전에 as.numeric()으로 변환해야 합니다. 이 파싱 논리를 실행 가능한 형태로 흉내 내 보면 다음과 같습니다.
어떤 방법을 써야 할까요?
- 데이터를 탐색하고 아이디어를 시험할 때 → 콘솔 또는 RStudio의 Run.
- 분석 전체를 실행할 때 → RStudio의 Source 또는 터미널의
Rscript. - 보조 함수를 세션으로 불러올 때 →
source("helpers.R"). - 자동화, 스케줄러, 파이프라인 →
Rscript와 입력을 위한commandArgs().
그 파일들 안에 들어가는 문법은 다음 문서에서 다룹니다. R 문법을 참고하세요.
핵심 정리
- 콘솔은 탐색용이고,
.R스크립트 파일은 재현 가능한 분석을 위한 것입니다. Rscript file.R은 명령줄에서 스크립트를 실행하고,source("file.R")은 세션 안에서 실행합니다(echo = TRUE를 붙이면 실행 과정을 볼 수 있습니다).- RStudio에서 Run은 한 줄을, Source는 파일 전체를 실행합니다. 새 세션에서의 Source가 진짜 재현성 시험입니다.
#!/usr/bin/env Rscript와chmod +x를 쓰면 스크립트를 직접 실행할 수 있고,commandArgs(trailingOnly = TRUE)는 인자를 문자열로 읽습니다.
다음 순서는 R의 문법입니다. <-를 사용한 할당, 함수 호출, 그리고 모든 것이 벡터라는 규칙을 다룹니다.
자주 묻는 질문
명령줄에서 R 스크립트를 어떻게 실행하나요?
R과 함께 설치되는 Rscript 명령을 사용합니다. Rscript analysis.R처럼 실행하면 파일을 처음부터 끝까지 실행하고 스크립트가 출력하는 내용을 그대로 보여 줍니다. 예약 작업, 파이프라인, 서버에서 R을 실행하는 표준 방법입니다.
RStudio의 Run과 Source는 어떻게 다른가요?
Run(Ctrl/Cmd+Enter)은 현재 줄 또는 선택 영역만 콘솔에서 실행합니다. 탐색할 때 알맞습니다. Source는 Rscript처럼 파일 전체를 한 번에 실행합니다. 깨끗한 세션에서 스크립트를 Source 하는 것이 위에서 아래까지 제대로 동작하는지 확인하는 진짜 시험입니다.
R에서 source()는 무슨 일을 하나요?
source("script.R")은 파일을 읽어 현재 R 세션 안에서 모든 줄을 실행합니다. 따라서 그 파일이 정의한 변수와 함수를 그대로 사용할 수 있게 됩니다. echo = TRUE를 추가하면 실행되는 각 줄도 함께 출력됩니다.
R 스크립트에 인자를 어떻게 전달하나요?
Rscript script.R value1 value2처럼 실행한 뒤, 스크립트 안에서 args <- commandArgs(trailingOnly = TRUE)로 읽습니다. trailingOnly = TRUE는 인터프리터 자체의 내부 인자를 걸러 내고 여러분이 넘긴 것만 남깁니다. 모든 값은 문자열로 들어오므로 숫자는 as.numeric()으로 변환하세요.