더북(TheBook)

09 | 타입 판별

데이터를 처리하기 위해 여러 함수를 호출하다 보면 반환된 결과의 타입이 무엇인지 분명하지 않을 때가 많다. 이 경우 다음 함수들을 사용하여 데이터 타입을 손쉽게 판단할 수 있다.

표 2-23 데이터 타입 판별 함수

함수

의미

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을 참조하기 바란다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.