R 조건문과 반복문은 문법을 따로 외우기보다 “결정을 한 번 내릴 것인가, 같은 작업을 여러 번 실행할 것인가”로 나누면 됩니다. 조건에 따라 경로를 바꾸면 if, 정해진 값들을 순회하면 for, 종료 시점이 조건에 달렸다면 while을 사용합니다.
코드를 쓰기 전에는 조건식의 결과가 한 개인지 여러 개인지도 확인합니다. 한 번의 분기라면 if, 벡터의 각 원소를 분류한다면 ifelse()나 논리 인덱싱이 더 자연스럽습니다.

if: 조건에 따라 한 번 분기하기
score <- 85
if (score >= 90) {
grade <- "A"
} else if (score >= 80) {
grade <- "B"
} else {
grade <- "C"
}
if의 조건은 길이 1인 TRUE 또는 FALSE여야 합니다. 벡터 전체에 조건을 적용하려면 ifelse()나 인덱싱을 사용해야 합니다.
조건이 여러 개라면 &&와 ||은 첫 번째 값만 이용하는 단일 분기에, &와 |은 벡터의 각 위치를 비교하는 연산에 사용합니다. 여러 값이 모두 기준을 만족하는지 한 번 판단하려면 all(), 하나라도 만족하는지 보려면 any()를 사용합니다.
all(scores >= 60)
any(scores >= 90)
ifelse: 벡터의 각 값에 조건 적용하기
scores <- c(72, 85, 94)
result <- ifelse(scores >= 80, "통과", "재학습")
ifelse()는 간단한 두 갈래 분류에 편리합니다. 조건이 여러 겹이거나 각 분기에서 여러 작업을 실행해야 한다면 읽기 쉬운 if 블록이 낫습니다.
for: 순회할 대상이 정해진 반복
for (score in scores) {
print(score * 1.1)
}
for는 값이 어디서 오고 몇 번 반복되는지 명확해 학습과 디버깅에 좋습니다. 결과를 저장할 때는 빈 객체를 무작정 늘리기보다 길이를 미리 정하거나 벡터 연산을 먼저 검토합니다.
adjusted <- numeric(length(scores))
for (i in seq_along(scores)) {
adjusted[i] <- scores[i] * 1.1
}
seq_along(scores)를 사용하면 벡터가 비어 있을 때도 잘못된 인덱스가 만들어지는 일을 피할 수 있습니다. 결과를 넣을 벡터의 길이를 먼저 정하면 반복할 때마다 객체 크기를 늘리지 않아도 됩니다.
while: 종료 조건이 중심인 반복
count <- 1
while (count <= 3) {
print(count)
count <- count + 1
}

while에서는 조건을 바꾸는 코드가 반드시 필요합니다. 위 예제의 마지막 줄이 빠지면 조건이 계속 참이 되어 무한 반복에 빠집니다.
외부 응답을 기다리는 코드처럼 반복 횟수를 미리 모르는 작업에는 최대 시도 횟수도 함께 둡니다. 종료 조건 하나에만 의존하지 않으면 예상하지 못한 입력에서도 반복을 멈출 수 있습니다.
attempt <- 1
success <- FALSE
while (!success && attempt <= 3) {
success <- check_result()
attempt <- attempt + 1
}
위 check_result()는 실제 작업에 맞게 정의해야 하는 예시 함수입니다. 성공 여부뿐 아니라 최대 횟수도 종료 기준에 포함해야 합니다.
next와 break로 반복 흐름 바꾸기
next는 현재 반복의 나머지를 건너뛰고 다음 값으로 이동합니다. break는 반복 전체를 끝냅니다.
for (score in scores) {
if (is.na(score)) next
if (score > 100) break
print(score)
}
건너뛴 값과 중단 이유가 분석 결과에 영향을 준다면 로그나 별도 객체에 남깁니다. 조용히 제외하면 실행은 끝나도 빠진 데이터의 원인을 나중에 찾기 어렵습니다.
반복문보다 벡터 연산이 나은 경우
R은 벡터 단위 연산을 기본으로 지원합니다. scores * 1.1처럼 한 줄로 같은 결과를 만들 수 있다면 반복문보다 의도가 분명하고 코드도 짧습니다.
반복문은 쓰면 안 되는 문법이 아닙니다. 파일 여러 개 읽기, 단계별 로그 남기기, 이전 결과에 따라 다음 작업을 바꾸기처럼 과정 자체가 중요한 경우에는 자연스러운 선택입니다.
오류를 줄이는 점검 순서
- 조건식만 따로 실행해
TRUE또는FALSE인지 봅니다. - 반복 횟수를 작은 값으로 줄입니다.
- 중간 객체를
print()로 확인합니다. - 중괄호와 들여쓰기를 맞춥니다.
- 반복이 끝나는 조건이 실제로 변하는지 확인합니다.
처음에는 입력값을 세 개 정도로 줄이고 매 반복에서 중간 결과를 출력합니다. 흐름이 확인되면 출력 코드를 제거하고 실제 데이터에 적용합니다.
데이터 구조를 배운 다음에는 R 기초 공략집 — 데이터 분석을 위한 R 프로그래밍 입문의 조건문·반복문 단원 순서에 맞춰 예제를 이어갈 수 있습니다.
'R' 카테고리의 다른 글
| R CSV 엑셀 불러오기: readr·readxl로 오류 없이 읽는 법 (0) | 2026.09.13 |
|---|---|
| R 데이터 분석 패키지 입문: tidyverse부터 무엇을 설치할까 (0) | 2026.09.12 |
| R 데이터 구조 차이: 벡터·리스트·행렬·데이터프레임 구분법 (0) | 2026.09.10 |
| R Positron 설치와 실행: 처음 시작하는 환경 설정 체크리스트 (0) | 2026.09.09 |
| R 데이터 분석 입문: 처음 4주에 배울 R 프로그래밍 순서 (0) | 2026.09.07 |
댓글