[R 기초] 4. 논리형과 결측값

2026. 6. 28. 14:00·BI&Programming-Tools/R

비교 연산자

두 값을 비교해서 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
'BI&Programming-Tools/R' 카테고리의 다른 글
  • [R 기초] 6. 데이터 구조 (행렬, 데이터프레임)
  • [R 기초] 5. 데이터 구조 (벡터, 팩터, 리스트)
  • [R 기초] 3. 수와 문자 다루기
  • [R 기초] 2. 변수와 데이터 타입
데이터로 읽는 생명
데이터로 읽는 생명
is-note 님의 블로그 입니다.
  • 데이터로 읽는 생명
    In Silico Note
    데이터로 읽는 생명
  • 전체
    오늘
    어제
    • 분류 전체보기 (190) N
      • Bio-Knowledge (16)
        • 분자생물학 & 유전학 기초 (0)
        • 전사체학 & 유전자 발현 (0)
        • 구조생물학 & 단백질 (0)
        • 싱글셀 & 다중오믹스 (0)
        • 임상유전학 & 질환 데이터 (0)
      • Programming (4)
        • API (4)
      • BI&Programming-Tools (111)
        • File Formats (14)
        • Linux & Bash Script (38)
        • Python (35)
        • R (11)
        • 통계 (8)
        • Pipeline Manager (0)
        • Etc (5)
      • Bio Data Analysis (28) N
        • 서열분석개론 (6)
        • WGS(Whole Genome Seq) (11)
        • WES(Whole Exome Seq) (2)
        • RNA-Seq (4) N
        • Metagenome (2)
        • Non-human Resequencing (1)
        • 임상유전체 분석 (1)
        • Multi-Omics (1)
      • Bio-Trends & Tech (1)
      • 코딩테스트 연습 (30)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬연습
    리눅스
    파이썬
    파이썬기초
    분자생물학
    GATK
    R기초
    fasta
    코딩테스트
    데이터분석
    파일포맷
    FASTQ
    리눅스기초
    wgs
    bioinformatics
    유전체분석
    통계
    생물정보학
    ngs
    R
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
데이터로 읽는 생명
[R 기초] 4. 논리형과 결측값
상단으로

티스토리툴바