09 | 타입 판별
데이터를 처리하기 위해 여러 함수를 호출하다 보면 반환된 결과의 타입이 무엇인지 분명하지 않을 때가 많다. 이 경우 다음 함수들을 사용하여 데이터 타입을 손쉽게 판단할 수 있다.
함수 |
의미 |
class(x) |
객체 x의 클래스 |
str(x) |
객체 x의 내부 구조 |
is.factor(x) |
주어진 객체 x가 팩터인가 |
is.numeric(x) |
주어진 객체 x가 숫자를 저장한 벡터인가 |
is.character(x) |
주어진 객체 x가 문자열을 저장한 벡터인가 |
is.matrix(x) |
주어진 객체 x가 행렬인가 |
is.array(x) |
주어진 객체 x가 배열인가 |
is.data.frame(x) |
주어진 객체 x가 데이터 프레임인가 |
다음은 벡터, 행렬, 데이터 프레임에 class( )를 적용하여 클래스를 구하는 예를 보여준다.
> class(c(1, 2)) [1] "numeric" > class(matrix(c(1, 2))) [1] "matrix" > class(data.frame(x=c(1, 2), y=c(3, 4))) [1] "data.frame"
class( )는 문자열로 데이터 타입을 반환하는데, 이 예에서는 숫자형 벡터에 numeric, 행렬에 matrix, 데이터 프레임에 data.frame을 반환했다. 특히 class( )에 벡터를 인자로 전달한 경우 numeric이 반환되었는데, 이는 벡터에 저장된 값이 숫자기 때문이다. 벡터에 저장된 데이터 타입에 따라 이 값은 logical, character, factor 등이 될 수 있다.
데이터 타입은 str( )로도 확인해볼 수 있다. 다음 예에서 벡터와 행렬의 결과가 유사해 보이지만 벡터의 경우 차원이 [1:2](1차원에 값이 2개)라고 표시되어 있는 반면, 행렬은 차원이 [1:2, 1](2차원이고 2행 1열)로 표시되어 있는 점이 다르다.
> str(c(1, 2)) num [1:2] 1 2 > str(matrix(c(1,2))) num [1:2, 1] 1 2 > str(list(c(1,2))) List of 1 $ : num [1:2] 1 2 > str(data.frame(x=c(1,2))) 'data.frame': 2 obs. of 1 variable: $ x: num 1 2
R의 데이터 타입에는 타입 이름이 ‘typename’이라 할 때 ‘is.typename( )’ 형태의 함수가 존재한다. 이 함수들은 주어진 객체 x가 ‘typename’ 데이터 타입에 해당하는지를 판별하는 용도로 사용한다. 이러한 함수의 예로 팩터인지 여부를 알려주는 is.factor( ), 숫자를 저장한 벡터인지를 알려주는 is.numeric( ), 문자열을 저장한 벡터인지를 알려주는 is.character( ) 등을 들 수 있다. 다음에 몇 가지 함수의 사용 예를 보였다.
> is.factor(factor(c("m", "f"))) [1] TRUE > is.numeric(1:5) [1] TRUE > is.character(c("a", "b")) [1] TRUE > is.data.frame(data.frame(x=1:5)) [1] TRUE
‘is.typename( )’ 형태의 함수 목록은 표 2-23을 참조하기 바란다.