R 치트시트 — 간결 레퍼런스
R 4.4 문법, 자료 구조와 가장 자주 쓰는 base R / tidyverse 치트시트로, 일상 시나리오의 약 80%를 다룹니다.
R R 4.4
R (GNU R / 대화형 인터프리터) · 함수형 · 벡터화 · OO (S3 / S4 / R6) · 동적
추천 학습 경로
먼저 Rscript 실행과 할당(<-)을 익히고 → 벡터, data.frame 등 자료 구조를 익히고 → if/for/apply 계열로 흐름을 작성하고 → 함수, 클로저와 파이프 |>를 배우고 → apply 집합 연산을 깊이 파고 → S3/R6 객체 지향과 오류 처리를 이해한 뒤 → 필요에 따라 파일 I/O, 병렬, 네트워크와 정규식을 배우세요. FAQ 절은 나중에 돌아와 함정을 피하는 데 좋습니다. 패키지 관리와 renv는 빌드 장을 참고하세요.
1.Hello World와 실행 환경
Rscript 실행, REPL 상호작용, 출력, 그리고 도움말.
최소 프로그램
R은 표현식 단위로 평가한다. print는 객체를 출력하고, cat은 직접 출력한다. 스크립트는 Rscript로 실행할 수 있다.
대입과 출력
대입은 <- 또는 =를 쓴다. print는 객체 구조를 보여주고, cat은 이어 붙여 출력하기에 적합하다. message는 stderr에 쓴다.
Rscript 실행
Rscript는 비대화형 방식으로 스크립트를 실행해 일괄 처리와 명령행에 적합하다. source는 세션 내에서 스크립트 파일을 실행한다.
명령행 인수
commandArgs(trailingOnly = TRUE)는 스크립트 뒤의 명령행 인수를 가져온다. 인수는 모두 문자열이다.
출력
print는 객체와 구조를 표시하고, cat은 따옴표 없이 이어 붙이며, sprintf는 형식을 지정한다. invisible은 자동 출력을 억제한다.
도움말
?는 도움말을 열고, ??는 전체 텍스트 검색이다. args는 함수의 형식 인수를, example은 예제를 실행한다.
패키지 로드
library는 패키지를 검색 경로에 로드하고, require는 논리값을 반환한다. ::는 패키지 내부 함수를 명시적으로 가져온다.
스크립트 실행
source는 현재 세션에서 스크립트 파일을 실행하며, 함수와 변수를 정의할 수 있다. echo는 실행 과정을 표시한다.
2.변수와 상수
대입, 기본 타입, NA/NULL, 그리고 타입 변환.
대입 연산자
<-가 관용적 대입이다. =도 가능하다. <<-는 함수 안에서 바깥쪽 변수를 쓴다. 전역 대입은 assign을 쓴다.
기본 타입
원자 벡터에는 numeric, integer, character, logical이 있다. 정수는 L 접미사를 쓴다. typeof는 저장 타입을 본다.
NA와 NULL
NA는 결측값을, NULL은 빈 객체를 나타낸다. is.na / is.null로 판정한다. NaN은 숫자 아님, Inf는 무한이다.
타입 변환
as.*로 명시적 변환을 한다. c()로 서로 다른 타입을 이어 붙이면 자동으로 가장 일반적인 타입으로 변환된다. 판정은 is.*를 쓴다.
벡터 생성
c는 이어 붙이기, 콜론(:)은 수열 생성, seq는 단계 크기 지정, rep는 반복이다. names로 원소에 이름을 부여한다.
명명 규칙
변수명에는 문자, 숫자, 점, 밑줄을 쓸 수 있으며 숫자로 시작할 수 없다. 점은 R에서 연산자가 아니다.
변수 관리
ls는 변수를 나열하고, rm은 삭제한다. exists는 존재 여부를 판정한다. rm(list = ls())는 환경을 비운다.
내장 상수
R의 자주 쓰는 내장 상수: pi, letters, month.name, 그리고 .Machine의 플랫폼 세부 정보.
스코프 기초
R의 어휘적 스코프: 함수 내부에서 변수를 단계별로 바깥으로 찾는다. 전역과 로컬의 같은 이름은 가려진다. get은 지정한 환경에서 값을 가져온다.
3.데이터 타입과 구조
벡터, 팩터, 행렬, 리스트, 데이터 프레임, 그리고 tibble, R의 데이터 구조 체계.
벡터
원자 벡터는 동질이며 1차원으로, R의 가장 기본 구조다. c()로 생성하며 인덱스는 1부터 시작한다.
팩터
팩터는 범주형 변수를 저장하며, levels로 범주를 고정한다. 순서형 팩터는 순서를 나타낸다. as.factor / factor로 생성한다.
행렬
matrix는 2차원 동질이다. byrow로 채우기 방향을 제어한다. 행명/열명과 차원명은 dimnames.
배열
array는 임의 차원의 동질 구조다. dim은 각 차원의 길이를 지정한다. 다차원 텐서에 적합하다.
리스트
list는 이질적이며 중첩 가능하다. $와 [[는 원소를 가져오고, [는 부분 리스트를 반환한다. length는 원소 개수를 센다.
데이터 프레임
data.frame은 표 형식 데이터로, 열은 이질적일 수 있다. 기본값은 stringsAsFactors=FALSE이다(R 4.0+). str/head로 본다.
tibble
tibble은 tidyverse의 현대적 데이터 프레임이다: 지연 계산 열, 친화적 출력, 문자열을 팩터로 변환하지 않음.
속성
attributes는 메타 정보를 담는다: names, dim, class 등. attr은 개별적으로 읽기/설정한다. structure는 한 번에 구성한다.
타입 판정
is.*로 타입을 판정하고, class/typeof/mode로 타입을 본다. as.*로 변환한다. is.data.frame 등은 분기에 쓰인다.
4.참조와 객체 의미
R에 날 포인터는 없다: copy-on-modify 값 의미와 environment 참조 의미.
쓰기 시 복사
R은 복사 시 수정(copy-on-modify)을 채택한다: 대입은 데이터를 공유하며, 수정될 때에만 실제로 복사된다. 큰 객체의 별칭 대입은 거의 비용이 없다.
tracemem 복사 추적
tracemem은 객체를 표시하며, R이 그 객체를 실제로 복사할 때 주소 변화를 출력한다. 예기치 않은 복사와 메모리 비용을 진단하는 데 쓰인다.
환경 참조
environment는 R의 참조 객체다: 함수에 전달해도 복사되지 않으며, 함수 안에서의 수정이 바로 반영된다. R의 '포인터'에 해당한다.
가변 상태 컨테이너
환경을 가변 상태 컨테이너로 사용한다: 카운터, 캐시, 누적기. 전역 변수 오염을 피하고 상태를 명시적으로 전달한다.
얕은 복사와 깊은 복사
리스트의 대입은 얕은 복사다: 하위 객체를 공유하며, 중첩 원소를 바꾸면 그 층이 복사된다. 깊은 복사는 명시적으로 구현해야 한다.
참조 클래스 R6
R6는 참조 의미의 클래스다: 객체는 참조로 전달되며 메서드가 복사본이 아닌 원본을 수정한다. 상태 관리에 적합하다.
data.table 참조
data.table은 :=로 제자리 수정한다(참조 의미). data.frame은 복사 의미다. setDT는 제자리로 data.table로 변환한다.
객체 크기
object.size는 단일 객체의 점유를, gc는 전체 메모리를 본다. lobstr::obj_size는 공유량을 계산할 수 있다.
명시적 복사
독립 복사본이 필요할 때 명시적으로 복사한다: 리스트는 lapply로 재귀 복사하고, data.table은 copy를, 벡터는 []를 쓴다.
5.흐름 제어
if / else, 벡터화된 ifelse, for / while, switch, 그리고 논리 연산.
if / else
if 조건은 길이가 1이어야 한다. 1이 아니면 첫 원소를 취하고 경고를 낸다. else는 if와 같은 줄에 중괄호가 일치해야 한다.
ifelse 벡터화
ifelse는 벡터의 원소별 조건을 판정해 조건과 같은 길이의 결과를 반환한다. 일괄 치환에 적합하다.
for 루프
for는 벡터 또는 수열을 순회한다. seq_along은 인덱스로 순회하며, 1:length의 빈 수열 함정을 피한다.
while과 repeat
while은 조건을 먼저 판정한 뒤 실행한다. repeat는 무조건 반복하며 break로 빠져나온다. 둘 모두 무한 루프에 주의한다.
next와 break
next는 다음 반복으로 넘어가고, break는 루프를 빠져나간다. 건너뛰기와 조기 종료에 적합하다.
switch
switch는 위치 또는 이름으로 분배한다. 숫자는 n번째를 취하고, 문자는 이름이 일치하는 분기로 가며, 매칭되지 않으면 NULL을 반환한다.
벡터화가 루프보다 우월
R은 벡터화로 명시적 루프를 대체합니다: 벡터 전체를 한 번에 연산하여 더 빠르고 간결합니다. 루프는 벡터화할 수 없는 경우에만 사용하세요.
논리 연산
& |는 벡터화된 논리 연산이고, && ||는 첫 번째 요소만 평가합니다(단락 평가). any/all은 결과를 요약합니다.
인덱스 순회
seq_along / seq_len은 인덱스를 생성하고, rev는 역순입니다. which는 위치를 가져옵니다. split은 그룹별 루프입니다.
6.함수와 클로저
함수 정의, 매개변수, 지연 평가, 가변 인자, 클로저와 파이프.
함수 정의
function으로 함수를 정의하고, 함수 본문의 마지막 표현식이 반환값입니다. 익명 함수는 매개변수에 직접 사용됩니다.
매개변수와 기본값
함수 매개변수에는 기본값을 설정할 수 있습니다. 호출 시 매개변수 이름을 생략하고 위치로 전달하거나, 이름으로 전달할 수 있습니다. missing은 제공 여부를 판단합니다.
지연 평가
R 매개변수는 지연 평가됩니다: 사용될 때만 평가되며, 사용되지 않으면 오류가 발생하지 않습니다. force는 강제로 미리 평가합니다. 이는 클로저에서 매우 중요합니다.
가변 인자
...는 임의의 여러 매개변수를 캡처합니다. list(...)로 수집하고, do.call로 리스트를 사용해 동적으로 함수를 호출합니다.
반환값
함수는 마지막 표현식을 반환합니다. return은 조기 반환합니다. invisible은 반환값을 자동으로 출력하지 않습니다.
클로저
함수는 생성된 환경을 캡처하여 비공개 상태를 보유할 수 있습니다. 팩토리 함수는 상태를 가진 새로운 함수를 생성합니다.
익명 함수
익명 함수는 함수 리터럴이며, apply 계열과 purrr에서 자주 사용됩니다. R 4.1+는 \(x) 축약을 지원합니다.
고차 함수
함수는 매개변수로 다른 함수에 전달하거나 함수를 반환할 수 있습니다. Map / Reduce / Filter 등 내장 고차 함수.
파이프
|>는 네이티브 파이프로 왼쪽 결과를 오른쪽 함수의 첫 번째 매개변수로 전달하여 중첩 호출을 선형으로 만듭니다. %>%는 magrittr 버전입니다.
7.문자열
문자 벡터, 연결, 추출, 분할, 정규식과 포맷팅.
문자열 기본
문자 벡터는 따옴표를 사용하며, 큰따옴표와 작은따옴표는 동일합니다. nchar는 길이, []는 문자를 가져옵니다. 백슬래시는 이스케이프가 필요합니다.
연결
paste는 기본적으로 공백으로 구분하고, paste0는 구분자가 없습니다. collapse는 전체 벡터를 하나의 문자열로 합칩니다. 벡터화된 연결.
추출
substr / substring은 위치로 추출하고, [] 대괄호는 단일 문자를 가져옵니다. strsplit은 분할.
분할
strsplit은 구분자로 리스트로 분할합니다. unlist는 평탄화합니다. 정규식도 구분자로 사용 가능합니다.
정규식 함수
grep / grepl은 매칭, gsub / sub는 치환입니다. 벡터화되어 모든 요소를 처리합니다. 자세한 내용은 정규식 섹션을 참조하세요.
포맷팅
sprintf는 C의 printf 스타일 포맷팅을 모방합니다. %s는 문자열, %d는 정수, %f는 부동소수점. formatC / round는 숫자를 제어합니다.
대소문자 변환과 공백 제거
toupper / tolower는 대소문자를 변환하고, trimws는 공백을 제거합니다. chartr은 문자 치환입니다. 도구명 처리에 자주 사용됩니다.
인코딩 처리
R 문자열은 UTF-8이 주를 이룹니다. Encoding은 인코딩을 확인하고, enc2utf8은 변환합니다. iconv는 코드 변환을 합니다.
stringr
tidyverse의 문자열 처리 패키지. str_ 접두사가 붙은 함수로 명명이 통일되어 있으며, str_detect / str_replace / str_extract.
8.집합과 apply 계열
apply / lapply / sapply로 일괄 순회, 정렬, 중복 제거, 집합 연산과 dplyr 데이터 조작.
lapply와 sapply
lapply는 리스트/벡터의 각 요소에 함수를 적용하고 리스트를 반환합니다. sapply는 벡터나 행렬로 단순화를 시도합니다.
apply
apply는 행렬/배열의 차원을 따라 일괄 연산합니다. MARGIN=1은 행별, 2는 열별. 반환값은 차원별로 결합됩니다.
mapply 다중 인자
mapply는 여러 매개변수에 함수를 병렬로 적용하며, Map에 대응합니다. 짧은 매개변수는 루프로 보충됩니다. SIMPLIFY는 단순화를 제어합니다.
split 그룹화
split은 인자별로 벡터를 그룹 리스트로 분할합니다. lapply와 함께 그룹 통계를 수행하며, group-by와 동일합니다.
정렬과 순위
sort는 벡터를 정렬하고, order는 정렬 인덱스를 반환하며, rank는 순위를 매�니다. decreasing은 방향을 제어합니다. 데이터 프레임을 열별로 정렬.
중복 제거
unique은 중복을 제거하고, duplicated는 중복을 표시합니다. 중복 행 중 첫 번째만 취합니다. all.equal은 벡터를 비교합니다.
집합 연산
union / intersect / setdiff 집합 연산. %in%은 요소 존재를 판단합니다. unique 후 교집합, 합집합, 차집합을 구합니다.
리스트 조작
리스트 결합, 평탄화, 일괄 명명 변경. unlist는 재귀적으로 평탄화하고, do.call은 배열로 결합합니다. purrr의 타입화된 조작.
dplyr 데이터 조작
select/filter/mutate/arrange/summarise는 파이프식으로 데이터 프레임을 조작하며, group_by는 그룹화합니다. 핵심 tidyverse.
9.메모리 관리
가비지 컬렉션, 객체 크기, 복사 비용, 사전 할당과 성능 프로파일링.
가비지 컬렉션
R은 자동 참조 카운팅 + 주기적 GC를 사용합니다. gc는 수동으로 회수하고 보고합니다. 대규모 데이터 루프 후 호출할 수 있습니다.
객체 크기
object.size는 단일 객체의 바이트 수를 확인합니다. format은 가독성 있는 단위로 변환합니다. 대규모 데이터 세트는 메모리를 예측해야 합니다.
복사 비용
R의 값 의미론은 수정 시 전체 객체를 복사하므로, 대형 객체 수정 비용이 높습니다. 대형 벡터 요소를 자주 수정하지 마세요.
사전 할당
먼저 길이가 있는 결과 벡터를 할당한 다음 루프로 채워서, 반복적인 연결 복사를 피합니다. numeric/character 사전 할당.
벡터화와 성능
가능한 한 벡터 전체로 연산하세요. 행 결합 rbind는 느리므로, do.call(rbind, list) 또는 data.table을 사용하세요. 마이크로 벤치마크.
메모리 상한
memory.limit(Windows) 상한을 확인/조정합니다. object.size로 검사. ulimit가 세션에 영향.
성능 프로파일링
Rprof는 함수 호출 시간을 기록합니다. summaryRprof는 요약합니다. system.time은 대략적인 타이밍. profvis는 시각화.
data.table 메모리
data.table은 참조 의미론을 사용하여 복사를 줄입니다: :=는 제자리 수정, setDT는 변환, copy는 명시적 복사. 대규모 데이터 세트에서 메모리를 절약합니다.
10.객체지향 (S3 / S4 / R6)
S3 간이 제네릭, S4 형식적 클래스, R6 참조 클래스, 세 가지 OO 시스템이 각자 역할.
S3 클래스 기본
S3는 R의 간이 OO: class 속성 + 제네릭 함수. unclass로 기반을 확인. 가장 흔히 사용되며 가장 가볍습니다.
S3 메서드
class.method 함수를 정의하면 제네릭이 구현됩니다. UseMethod가 디스패치합니다. NextMethod가 부모 메서드를 호출합니다.
S3 생성
커스텀 클래스는 생성기와 검증 제공이 필요합니다. structure로 한 번에 클래스를 설정합니다. print / summary로 커스텀 출력.
S4 클래스
S4는 형식적 OO: setClass로 슬롯을 정의하고, validity로 검증하며, setGeneric / setMethod가 제네릭.
R6 클래스
R6는 참조 시맨틱 캡슐화 클래스로, 메서드 안에서 self$로 접근한다. 객체 지향 프로그래밍이 다른 언어와 더 가깝다.
제네릭 디스패치
디스패치는 객체의 class 속성에 기반하며, UseMethod는 class별로 해당 메서드를 찾는다. 레거시 클래스(S3)는 차례로 시도한다.
상속
S3는 class 속성으로 상속(NextMethod 체인)하고, S4는 contains를, R6는 inherit을 사용한다.
세 시스템 비교
S3는 대부분의 패키지에서 가볍게 쓰이고, S4는 엄격한 정의에 쓰이며, R6의 참조 시맨틱은 상태 객체에 적합하다. 실제로는 섞어 쓰는 경우가 많다.
class와 속성
class는 특수 속성으로, 제네릭이 이를 기준으로 디스패치한다. attr은 사용자 정의 속성을 추가할 수 있으며 디스패치에는 영향을 주지 않는다. class<-는 클래스를 직접 설정한다.
11.오류 처리
stop으로 오류, warning으로 경고, tryCatch로 포착, 그리고 조건 시스템.
stop으로 오류 발생
stop은 오류를 던져 실행을 종료한다. stopifnot는 조건을 빠르게 검증한다. 오류 메시지는 원인을 명확히 적는 것이 좋다.
warning 경고
warning은 치명적이지 않은 알림을 주며 중단하지 않는다. suppressWarnings로 침묵시킨다. options(warn=2)로 오류로 변환한다.
tryCatch
tryCatch는 오류/경고를 포착해 처리 결과를 반환한다. error, warning, finally 세 부분으로 구성된다.
try 내결함성
try는 표현식 결과를 반환하며, 오류 발생 시 try-error 클래스 객체를 돌려주고 전체를 중단하지 않는다. 일괄 처리에 자주 쓰인다.
조건 시스템
R의 오류/경고/메시지는 모두 조건 객체다. signalCondition이 발생시키고, withCallingHandlers가 포착한 뒤 계속 진행한다.
경고 가로채기
withCallingHandlers는 경고를 잡되 실행은 멈추지 않으며, 기록하고 계속 진행한다. invokeRestart와 함께 쓰인다.
restarts 복원 지점
신호 처리의 고급 메커니즘이다. 호출자가 복원 동작을 제공할 수 있다. invokeRestart는 포착 쪽에서 호출한다.
루프 안의 오류
일괄 처리에서 한 항목의 실패가 전체를 중단해서는 안 된다. tryCatch로 항목별 내결함 처리를 하고 결과를 모은다.
사용자 정의 오류
사용자 정의 오류 클래스는 추가 필드를 담는다. simpleError / structure으로 구성하며, class로 타입을 식별한다.
12.파일 및 데이터 I/O
CSV, readr, 줄 단위 읽기, RDS, JSON, 연결 객체와 바이너리.
CSV 읽기/쓰기
read.csv / write.csv로 CSV를 읽고 쓴다. stringsAsFactors=FALSE로 팩터 변환을 막는다. check.names는 열 이름을 처리한다.
readr 읽기/쓰기
readr은 tidyverse의 고속 CSV 읽기 패키지다. read_csv는 타입을 자동 추론하고, write_csv는 빠르게 쓴다.
줄 단위 읽기
readLines는 줄 단위로 읽어 문자 벡터로 만든다. writeLines로 쓴다. 대용량 파일은 청크 단위로 읽는다.
read.table로 표 읽기
read.table은 범용 표 읽기 함수이며, read.csv는 그 변형이다. header / sep / na.strings가 자주 쓰는 인자다.
RDS 저장/읽기
saveRDS는 단일 R 객체를 저장하고, readRDS는 읽어온다. 타입과 속성을 그대로 보존하므로 CSV보다 완전하다.
JSON 읽기/쓰기
jsonlite는 주류 JSON 패키지다. fromJSON은 파싱, toJSON은 직렬화다. 행 단위 JSON은 API 응답 처리에 쓴다.
연결 객체
연결은 파일/네트워크 등 데이터 소스를 추상화한 것이다. file로 열고, readLines / writeLines로 읽고 쓰며, close로 닫는다.
바이너리 읽기/쓰기
readBin / writeBin으로 바이너리를 읽고 쓴다. raw 타입은 바이트를 담는다. 대용량 파일과 이미지 데이터는 바이너리로 다룬다.
기타 형식
readxl은 Excel을, haven은 SPSS/Stata를, feather/parquet는 컬럼 지향 형식을 읽는다. 필요할 때 로드해 쓴다.
13.자주 만나는 함정
R을 일상적으로 쓸 때 가장 자주 만나는 함정과 올바른 작성법.
조건 길이가 1이 아님
if는 길이가 1인 조건이 필요하다. 벡터 조건은 첫째 값만 판단하고 경고를 낸다. any/all로 모으거나 ifelse를 쓴다.
팩터 → 숫자 변환
팩터를 바로 as.numeric으로 바꾸면 내부 코드가 나온다. 먼저 문자로 바꾼 뒤 숫자로 바꿔야 실제 값이다.
차원 손실
행렬에서 단일 행/열을 뽑으면 기본적으로 벡터로 축소된다. drop = FALSE로 차원을 유지한다.
루프로 벡터 키우기
루프에서 c()로 이어 붙일 때마다 벡터 전체가 복사되어 매우 느리다. 미리 할당하거나 벡터화 연산으로 바꾼다.
NA와 비교
NA가 비교에 들어가면 결과가 NA가 되어 FALSE가 나오지 않는다. NA를 걸러낼 때는 is.na로 판정한다.
부분 일치
$와 [[은 유일한 접두사 일치를 한다. 열 이름을 줄여 쓰는 침묵 동작이 버그를 숨기기 쉽다. 전체 이름을 쓰거나 dplyr을 사용한다.
재활용 (recycling)
짧은 벡터는 연산에 참여할 때 긴 벡터 길이에 맞게 순환하며 채워진다. 길이가 배수가 아닐 때만 경고가 떠서 숨은 버그가 나오기 쉽다.
리스트 평탄화
c()는 리스트의 최상위를 평탄화하려 한다. 리스트의 원소를 다시 리스트에 넣을 때는 list()를 쓴다. unlist의 재귀 평탄화에는 위험이 있다.
패키지 가림
library로 실은 패키지는 같은 이름의 함수를 가리며, search 순서에서 뒤에 실린 것이 먼저 숨겨진다. ::로 모호함을 없앤다.
14.병렬 처리와 동시성
parallel, mclapply, foreach, future: R의 다중 프로세스 병렬 처리.
parallel 개요
R의 병렬 처리는 다중 프로세스(fork)나 소켓에 기반한다. parallel 패키지에 mcapply과 클러스터가 내장돼 있다. 병렬은 시작 오버헤드가 있어서 작업이 충분히 커야 가성이 맞다.
mclapply 병렬
mclapply는 parallel의 병렬 lapply로, fork 방식으로 구현된다. Unix 계열에서만 쓸 수 있다(Windows는 클러스터 필요).
클러스터 병렬
makeCluster로 프로세스 클러스터를 만들고, parLapply로 병렬 적용한다. Windows도 지원한다. 사용 후 stopCluster로 정리한다.
foreach 병렬
foreach 루프는 결과를 모아 주고, %dopar%는 병렬 실행(doParallel 필요)이다. %do%는 순차 버전이다.
future 비동기
future 패키지는 병렬 처리를 '미래 값'으로 추상화한다. future()로 비동기 작업을 시작하고, value()로 결과를 가져온다. plan으로 전략을 고른다.
공유 상태
병렬 워커는 메모리를 공유하지 않는다: 각자 환경을 복사해 쓴다. 파일 쓰기는 동시 접근 충돌을 방지해야 하며, 결과는 return으로 모아 돌려준다.
난수 시드
병렬에서는 워커마다 독립적인 난수 시드가 필요하다. set.seed를 전역에 둔 뒤 clusterSetRNGStream 또는 future.seed로 재현 가능성을 확보한다.
병렬 성능
병렬의 이득은 작업 단위 크기, 코어 수, 통신 비용에 따라 제한된다. 먼저 순차 코드의 병목을 프로파일링하고, 가장 큰 블록부터 병렬화한다.
15.네트워크 요청
다운로드, httr2/httr 요청, JSON API, URL 처리, 웹 스크레이핑.
파일 다운로드
download.file로 파일을 다운로드한다. mode로 바이너리를 지정한다. R.utils는 이어받기를 지원한다. 느린 연결은 timeout을 설정할 수 있다.
httr2 요청
httr2는 차세대 HTTP 클라이언트다. req_perform으로 요청을 실행하고, resp_body_json으로 응답을 파싱한다. 파이프라인 방식으로 요청을 구성한다. </content> </invoke>
GET 요청
GET은 리소스를 읽습니다. base의 readLines로 텍스트를 가져올 수 있고, httr GET + content로 파싱합니다. query 파라미터는 URL에 붙입니다.
POST 요청
POST는 데이터를 전송합니다. body에 JSON이나 폼을 담습니다. httr POST와 httr2 req_body_json 두 가지 스타일이 있습니다.
JSON API
JSON API 호출: 요청 + jsonlite 파싱. 결과는 보통 중첩 리스트이므로 flatten으로 데이터 프레임으로 바꿉니다. 페이지네이션과 오류 처리도 함께 고려합니다.
URL 처리
parse_url로 URL 구성 요소를 분해하고, URLencode로 인코딩합니다. URLdecode로 되돌립니다. base에 내장되어 있습니다.
웹 스크레이핑
rvest로 HTML을 파싱합니다. html_elements로 노드를 선택하고, html_text로 텍스트를 가져옵니다. robots 규칙과 요청 빈도 제한을 지키세요.
TCP 소켓
socketConnection으로 TCP 연결을 만들어 문자열을 읽고 씁니다. 간단한 프로토콜과 사내 서비스에 적합합니다.
16.시간과 날짜
Sys.Date / POSIXct, 포매팅, lubridate와 타임존.
현재 시각
Sys.Date는 오늘 날짜, Sys.time은 현재 날짜와 시간입니다. date는 현재 시각 문자열입니다.
날짜 기초
Date 클래스가 날짜 타입입니다. as.Date로 문자열을 변환하고, 일수를 더하거나 뺍니다. unclass로 일수 값을 확인합니다.
POSIXct
POSIXct는 초 단위 타임스탬프를 저장하고, POSIXlt는 구성 요소로 분해합니다. as.POSIXct로 문자열을 파싱하며 타임존을 처리합니다.
포맷팅
strftime / format으로 지정자에 따라 출력합니다. %Y 연 %m 월 %d 일 %H 시 %M 분 %S 초.
lubridate 소개
lubridate는 친숙한 날짜 함수를 제공합니다: ymd / ymd_hms로 파싱, year / month로 구성 요소 추출, 간격 덧셈과 뺄셈.
날짜 시퀀스
seq로 날짜 시퀀스를 만듭니다: by로 일/월/년 단위 지정. 임의 간격이나 영업일에는 seq.Date를 씁니다.
시간 차이
날짜를 빼면 difftime이 됩니다. units로 단위를 지정합니다. as.numeric으로 수치를 얻습니다. 소요 시간 측정에 사용합니다.
타임존
tz 인자로 타임존을 지정합니다. Sys.timezone은 현재 타임존입니다. OlsonNames는 유효한 타임존을 나열합니다. 타임존이 다른 시각도 비교할 수 있습니다.
17.프로세스와 환경
시스템 명령 실행, 환경 변수, 명령줄 인자, 플랫폼 정보와 경로.
명령 실행
system은 시스템 명령을 실행하고 종료 코드를 반환합니다. system2는 인자 전달이 더 안전합니다. 출력 캡처는 capture나 intern을 씁니다.
환경 변수
Sys.getenv로 읽고, Sys.setenv로 씁니다. unsetenv로 삭제합니다. PATH나 R 관련 변수를 자주 다룹니다.
명령행 인수
commandArgs로 스크립트 인자를 가져옵니다. trailingOnly로 R 자체 인자를 제거합니다. 파싱은 optparse를 쓰거나 base로 직접 작성합니다.
종료 상태
quit으로 R을 종료합니다. q('no')는 작업 공간을 저장하지 않습니다. 오류 종료는 quit(status = 1)로 스크립트가 판단하게 합니다.
플랫폼 정보
R.version은 버전, Sys.info는 시스템 정보, .Platform은 플랫폼 세부 정보입니다. 경로 구분자 등 크로스 플랫폼 처리에 씁니다.
경로 관리
file.path로 경로를 결합하고, dirname / basename으로 분해하며, normalizePath로 절대 경로를 정규화합니다. file.exists로 존재 여부를 확인합니다.
지연 대기
Sys.sleep은 지정한 초만큼 일시 정지합니다. 요청 속도 제한이나 외부 리소스 준비 대기에 쓸 수 있습니다. 단위는 초입니다.
Rscript 스크립트
Rscript는 비대화식 실행 진입점으로, 예약 작업과 배치 처리에 적합합니다. 스크립트 첫 줄에 shebang을 넣을 수 있습니다.
18.정규 표현식
grep / grepl, gsub 치환, regexpr 위치 탐색, stringr와 자주 쓰는 패턴.
grep과 grepl
grep은 일치한 인덱스를, grepl은 논리 벡터를 반환합니다. ignore.case로 대소문자를 무시합니다. value는 일치한 값을 반환합니다.
gsub 치환
gsub은 모든 일치를 치환하고, sub은 첫 번째만 치환합니다. \\1로 캡처 그룹을 참조합니다. perl=TRUE로 확장 문법을 씁니다.
regexpr 위치 탐색
regexpr은 첫 일치 위치와 길이를 반환하고, gregexpr은 전부 반환합니다. regmatches로 일치 텍스트를 추출합니다.
문법 기초
기본 정규식 메타 문자: ^ 시작 $ 끝 . 임의 문자 . 문자 클래스 [] 그룹 () 수량자 * + ? {} 이스케이프 \\.
자주 쓰는 패턴
자주 쓰는 패턴 모음: 이메일, 전화번호, 날짜, 공백 정리, 숫자 추출. 필요에 맞게 조정하세요.
stringr 매칭
stringr은 정규식 문법은 같지만 인터페이스가 일관됩니다. str_detect / str_extract / str_match와 _all 버전이 있습니다.
stringr 치환
str_replace / str_replace_all로 치환합니다. regexp에는 fixed나 perl을 쓸 수 있습니다. str_remove는 일치 부분을 삭제합니다.
플래그와 확장
perl=TRUE는 PCRE 확장을 활성화합니다: 전방 탐색, 명명 그룹. fixed=TRUE는 리터럴 매칭입니다. ignore.case도 있습니다.
19.패키지 관리와 빌드
CRAN 설치, renv 의존성 관리, 패키지 구조와 R CMD, testthat, roxygen.
패키지 설치
install.packages로 CRAN에서 설치합니다. update.packages로 갱신합니다. library로 로드합니다. 개발 버전은 devtools / remotes를 씁니다.
CRAN과 저장소
CRAN은 공식 패키지 저장소입니다. repos로 미러를 지정합니다. available.packages로 설치 가능한 목록을 봅니다. CRAN 정책이 배포를 제약합니다.
renv 의존성 관리
renv는 프로젝트 의존성 버전을 고정하며, Python venv와 비슷합니다. renv::init으로 초기화하고, snapshot / restore로 잠금 파일을 동기화합니다.
패키지 구조
R 패키지 표준 구조: DESCRIPTION, R/, man/, tests/, NAMESPACE. R/에는 소스 코드를, man/에는 문서를 둡니다.
R CMD 명령
R CMD 계열 명령으로 패키지를 빌드/검사합니다: build로 패키징, check로 검사, INSTALL로 설치. 배포 전에는 반드시 check를 거칩니다.
testthat 테스트
testthat은 주류 테스트 프레임워크입니다. expect_equal 같은 단언과 test_that으로 케이스를 구성합니다. usethis로 테스트 파일을 생성합니다.
포맷과 검사
styler로 코드 스타일을 통일하고, lintr로 정적 검사를 합니다. RStudio Addins나 pre-commit과 함께 쓰면 깔끔하게 유지됩니다.
roxygen 문서
roxygen2는 주석으로 .Rd 문서를 생성합니다. #'로 시작하며 @param / @return / @export 태그를 씁니다. 함수 문서가 소스 코드와 같은 곳에 있습니다.
세션 재현
sessionInfo는 버전과 의존성을 기록해 재현성을 보장합니다. renv.lock으로 의존성을 고정합니다. R 버전도 함께 기록해야 합니다.
이 치트시트에 대해
이 페이지는 R 4.4의 자기 완결형 치트시트로, 실제 데이터 분석에서 base R과 tidyverse가 가장 많이 쓰이는 약 80%의 시나리오를 다룹니다. 내용은 현대적 관용구에 초점을 둡니다: 네이티브 파이프 `|>`, 익명 함수 `\(x)` 축약, `stringsAsFactors = FALSE`와 함께 쓰는 `data.frame`, 벡터화된 `ifelse`, `purrr::map_*` 타입 기반 집합 연산, 그리고 R 특유의 수정 시 복사(copy-on-modify)와 environment 참조 의미론. 권위 있는 참고 자료로는 공식 R 매뉴얼과 R for Data Science가 있습니다. 19개 장은 각각 하나의 주제에 집중합니다 — 첫 프로그램, 변수와 타입부터 apply 계열, S3/R6 객체 지향, 병렬과 네트워크까지. 각 장은 예제가 있는 8–9개의 소절(각 5–20줄)로 나뉘며, 총 약 160개 주제입니다. 코드 조각은 일부러 짧고 자기 설명적으로 작성했으며, 복사해서 R이나 RStudio에 바로 붙여 넣어 실행할 수 있습니다. 모든 처리는 브라우저 안에서 이루어집니다 — 업로드도, 추적도 없습니다. 이 페이지는 GuruToolkit 무료 개발자 도구 모음의 일부이며, 코드 조각은 어떠한 보증도 없이 자유롭게 사용할 수 있습니다.
버전 2.1.0