비교 연산자
두 값을 비교해서 TRUE 또는 FALSE를 반환합니다.
3 == 3 # TRUE 같다
3 != 5 # TRUE 같지 않다
3 > 5 # FALSE 크다
3 < 5 # TRUE 작다
3 >= 3 # TRUE 크거나 같다
3 <= 5 # TRUE 작거나 같다
벡터에 비교 연산을 하면 원소별로 결과가 반환됩니다.
x <- c(1, 5, 3, 8, 2)
x > 3 # FALSE TRUE FALSE TRUE FALSE
x == 5 # FALSE TRUE FALSE FALSE FALSE
문자열 비교도 가능합니다.
알파벳 순서를 기준으로 비교합니다.
"apple" == "apple" # TRUE
"apple" < "banana" # TRUE
논리 연산자
벡터 단위 연산: &, |, !
TRUE & FALSE # FALSE (AND: 둘 다 TRUE여야 TRUE)
TRUE | FALSE # TRUE (OR: 하나라도 TRUE면 TRUE)
!TRUE # FALSE (NOT: 반전)
벡터에 적용하면 원소별로 연산합니다.
x <- c(1, 5, 3, 8, 2)
x > 2 & x < 6 # FALSE TRUE TRUE FALSE FALSE
x < 2 | x > 6 # TRUE FALSE FALSE TRUE FALSE
데이터 필터링에서 자주 사용하는 패턴입니다.
x[x > 2 & x < 6] # 3 5 (조건을 만족하는 원소만 추출)
단락 평가: &&, ||
&&와 ||는 벡터가 아닌 단일 값에만 사용합니다.
앞의 조건만으로 결과가 결정되면 뒤를 평가하지 않습니다.
TRUE && FALSE # FALSE
TRUE || FALSE # TRUE
# 벡터에 사용하면 첫 번째 원소만 비교하고 경고 발생
c(TRUE, FALSE) && c(TRUE, TRUE) # TRUE (첫 원소만 비교, 경고)
조건문(if) 안에서는 &&, ||를 사용하고, 벡터 필터링에는 &, |를 사용하는 것이 일반적입니다.
x <- 5
if (x > 0 && x < 10) {
print("범위 안")
}
논리형 관련 함수
any(), all()
x <- c(TRUE, FALSE, TRUE, FALSE)
any(x) # TRUE (하나라도 TRUE면 TRUE)
all(x) # FALSE (모두 TRUE여야 TRUE)
벡터 조건과 함께 사용하는 경우가 많습니다.
x <- c(1, 5, 3, 8, 2)
any(x > 7) # TRUE (7보다 큰 원소가 하나라도 있는가)
all(x > 0) # TRUE (모든 원소가 0보다 큰가)
which()
조건을 만족하는 원소의 인덱스를 반환합니다.
x <- c(1, 5, 3, 8, 2)
which(x > 3) # 2 4 (5와 8의 인덱스)
which(x == max(x)) # 4 (최댓값의 인덱스)
which.min(x) # 1 (최솟값의 인덱스)
which.max(x) # 4 (최댓값의 인덱스)
ifelse()
벡터 단위로 조건에 따라 다른 값을 반환합니다.
파이썬의 삼항 연산자와 비슷하지만, 벡터에도 적용된다는 점이 다릅니다.
x <- c(3, 8, 1, 6, 2)
ifelse(x >= 5, "high", "low")
# "low" "high" "low" "high" "low"
if/else는 단일 조건, ifelse()는 벡터 조건에 사용합니다.
NA: 결측값
NA(Not Available)는 값이 없거나 알 수 없는 경우를 나타냅니다.
R에서 결측값을 처리할 때 가장 기본이 되는 개념입니다.
NA의 특징
NA는 어떤 연산을 해도 결과가 NA로 전파됩니다.
NA + 1 # NA
NA > 3 # NA
NA == NA # NA ← 주의: NA끼리 비교해도 TRUE가 아님
NA == NA가 TRUE가 아니라 NA를 반환한다는 점이 중요합니다. NA인지 확인하려면 반드시 is.na()를 사용해야 합니다.
x <- c(1, NA, 3, NA, 5)
is.na(x) # FALSE TRUE FALSE TRUE FALSE
x[!is.na(x)] # 1 3 5 (NA가 아닌 원소만 추출)
na.rm = TRUE
통계 함수에서 na.rm = TRUE를 지정하면 NA를 제외하고 계산합니다.
x <- c(1, NA, 3, NA, 5)
mean(x) # NA
mean(x, na.rm = TRUE) # 3
sum(x, na.rm = TRUE) # 9
NA의 종류
타입에 따라 세분화된 NA가 있지만, 일반적으로는 NA 하나로 통용됩니다.
NA # 논리형 NA (기본값)
NA_integer_ # 정수형 NA
NA_real_ # 실수형 NA
NA_character_ # 문자형 NA
NULL
NULL은 값이 없는 것이 아니라 객체 자체가 존재하지 않는 상태를 나타냅니다. NA와 혼동하기 쉽지만 의미가 다릅니다.
x <- NULL
is.null(x) # TRUE
length(NULL) # 0
y <- NA
is.null(y) # FALSE
length(NA) # 1
NA는 벡터 안의 원소로 존재할 수 있지만, NULL은 벡터 안에 넣으면 사라집니다.
c(1, NA, 3) # 1 NA 3 (NA는 원소로 유지)
c(1, NULL, 3) # 1 3 (NULL은 사라짐)
NULL은 주로 리스트에서 특정 요소를 제거하거나, 함수의 인자 기본값으로 "없음"을 표현할 때 사용합니다.
lst <- list(a = 1, b = 2, c = 3)
lst$b <- NULL # b 요소 제거
lst # $a: 1, $c: 3
NaN과 Inf
수치 계산 중 특수한 경우에 발생하는 값입니다.
0 / 0 # NaN (Not a Number: 정의되지 않는 계산)
1 / 0 # Inf (양의 무한대)
-1 / 0 # -Inf (음의 무한대)
log(-1) # NaN (경고 발생)
is.nan(NaN) # TRUE
is.infinite(Inf) # TRUE
is.finite(Inf) # FALSE
is.finite(NaN) # FALSE
is.finite(NA) # FALSE
is.na(NaN)은 TRUE를 반환합니다.
NaN도 NA의 일종으로 취급하기 때문입니다.
반면 is.nan(NA)는 FALSE입니다.
is.na(NaN) # TRUE
is.nan(NA) # FALSE
NA / NULL / NaN / Inf 비교
| 값 | 의미 | 확인 함수 |
| NA | 결측값 (값이 없음) | is.na() |
| NULL | 객체 없음 (길이 0) | is.null() |
| NaN | 정의되지 않는 수 (0/0 등) | is.nan() |
| Inf / -Inf | 양/음의 무한대 | is.infinite() |
'BI&Programming-Tools > R' 카테고리의 다른 글
| [R 기초] 6. 데이터 구조 (행렬, 데이터프레임) (0) | 2026.06.28 |
|---|---|
| [R 기초] 5. 데이터 구조 (벡터, 팩터, 리스트) (0) | 2026.06.28 |
| [R 기초] 3. 수와 문자 다루기 (0) | 2026.06.27 |
| [R 기초] 2. 변수와 데이터 타입 (0) | 2026.06.27 |
| [R 기초] 1. R 개념과 RStudio 환경 (0) | 2026.06.27 |
