없음

없음 에서 R

1개의 연습 문제

없음 소개

많은 언어에는 존재하지 않는 값을 나타내기 위해 null이나 none 같은 방법이 있어요. R은 많은 양의 (흔히 지저분한) 데이터를 다루도록 설계되었기 때문에, 여러 가지 형태의 없음을 가지고 있어요.

전체적인 목표는 누락되었거나 의심스러운 값을 만나는 즉시 표시하고, 예외를 발생시키지 않고 계속 진행하는 것이에요.

NULL

값이 정말로 존재하지 않는다면 NULL로 나타내요. 아마도 C나 Python이 하는 방식과 가장 가까울 거예요.

v <- c() # zero-length vector
v
#> NULL
is.null(v)
#> [1] TRUE

많은 상황에서 NULL 값은 그냥 무시돼요:

c(2, 3, NULL, 5)
#> [1] 2 3 5

NA

값은 존재하지만 그것이 무엇인지 모르는 상황에서는 NA를 사용해요. 예를 들어 도로를 지나는 차량을 셀 때, 사람 관측자가 병가를 내거나 자동 센서가 고장 날 수 있지만 교통은 계속 흘러가요.

v <- c(1, 2, NA, 4, 5)
v
#> [1]  1  2 NA 4  5
is.na(v) # test for data gaps
#> [1] FALSE FALSE  TRUE FALSE FALSE

따라서 NA는 자리 표시자로서, 이것을 어떻게 처리할지 결정해야 한다는 것을 사람에게 알려 줘요.

통계 함수는 보통 NA 값이 있으면 기본적으로 NA를 반환해요. 이 값들을 무시하고 싶다면 na.rm(NA remove) 매개변수를 사용해서 이를 명시적으로 지정해요:

v <- c(1, 2, NA, 4, 5)
mean(v)
#> [1] NA
mean(v, na.rm = TRUE)
#> [1] 3

NaN

"Not a Number"의 줄임말인 NaN은 숫자가 예상되는 상황에서 계산 문제가 있음을 표시해요.

n <- c(0, 2, 4)
d <- c(0, 1, 2)
n / d
#> [1] NaN   2   2  # 0/0 is mathematically undefined
is.nan(n / d)
#> [1]  TRUE FALSE FALSE

"잘못된" 계산의 유일한 가능성은 아니에요. 0으로 나누면 분자가 0이 아닌 경우 오류를 발생시키지 않고 Inf나 -Inf를 반환해요.

1 / 0
#> [1] Inf

빈 벡터

놀랍게도 R에는 비어 있음을 확인하는 표준 방법이 없어요. 다만 일부 서드파티 패키지는 is.empty() 같은 자체 함수를 구현해 놓았어요.

빈 벡터를 만드는 것조차 그렇게 명확하지는 않아요. 앞선 섹션에서 인자 없이 c()를 호출하면 벡터가 아니라 NULL을 반환한다는 것을 봤어요.

is.vector(c())
#> [1] FALSE

logical()이나 integer() 같은 함수는 원하는 길이를 지정하는 인자를 받는데, 이 길이는 0이 될 수 있어요.

z <- logical(0)
is.vector(z)
#> [1] TRUE
length(z)
#> [1] 0

벡터를 만든 다음 모든 원소를 제거할 수도 있어요. 벡터 개념에서 설명한 것처럼요. 그러면 적절한 타입의 길이가 0인 벡터가 만들어져요.

v <- 5
v[-1]  # delete the first element
#> numeric(0)
GitHub에서 편집 링크가 새 창이나 탭에서 열려요

없음 배우기