5.3 벡터의 유형 확인

벡터 유형에 따라 다른 작업을 수행하고 싶을 때도 있습니다.

벡터의 유형을 확인하는 한 가지 방법은 typeof()함수를 사용하는 것입니다(도움말은 ? typeof()을 참고하세요).

또 다른 방법은 TRUE 또는 FALSE를 반환하는 is.*() 형태의 테스트 함수를 사용하는 것입니다. Base R은 is.vector()is.atomic()과 같은 많은 함수를 제공하고 있습니다.

is.numeric(3)        # 숫자형인지 테스트합니다. : TRUE 반환
## [1] TRUE
is.integer(3L)       # 정수형인지 테스트합니다. : TRUE 반환
## [1] TRUE
is.logical(TRUE)     # 논리형인지 테스트합니다. : TRUE 반환
## [1] TRUE
is.logical(2)        # 논리형인지 테스트합니다. : 2는 논리형이 아니기 때문에 FALSE를 반환합니다.
## [1] FALSE
is.character("abc")  # 문자형인지 테스트합니다. : TRUE 반환
## [1] TRUE
is.character(4)      # 문자형인지 테스트합니다. : FALSE 반환
## [1] FALSE

5.3.0.1 tester 패키지

참고로 R 개체의 특성을 테스트할 수 있게 해 주는 tester 패키지의 is_* 함수를 사용하는 것이 더 안전합니다.

# install.packages("tester")
library(tester)
is_logical_vector(T)
## [1] TRUE

tester 패키지에서 제공하는 몇몇 함수들을 소개하면 다음과 같습니다.

함수 설 명
is_vector() 개체가 벡터인지 테스트합니다.
is_numeric_vector() 개체가 숫자형 벡터인지 테스트합니다.
is_string_vector() 개체가 문자형 벡터인지 테스트 합니다.
is_logical_vector() 개체가 논리형 벡터인지 테스트합니다.
is_not_vector() 개체가 벡터형이 아닌지 테스트합니다.
is_integer() 숫자가 정수형인지 테스트합니다.
is_not_integer() 숫자가 정수형이 아닌지 테스트합니다.
is_negative() 숫자가 음수인지 테스트 합니다.
is_string() 개체가 문자열인지 테스트합니다.
is_not_string() 개체가 문자열이 아닌지 테스트합니다.

5.3.0.2 변수의 클래스와 유형 확인

생성된 변수가 어떠한 클래스에 속하는지를 아는 것은 매우 중요하다. 변수의 클래스를 확인하는 방법으로 class() 함수를 사용하면 됩니다. 그리고 변수의 데이터 유형은 typeof() 함수를 이용하여 확인할 수 있다.

클래스 안에서 개체가 만들어 집니다. 예를 들어, 우리가 집을 짓고자 할 때, 짓고자 하는 집의 청사진(blue print)을 클래스로 생각할 수 있습니다. 그리고 이러한 청사진을 이용하여 지은 집을 개체(object)라 할 수 있습니다. 즉 하나의 클래스를 이용하여 여러 개체를 생성할 수 있는 것입니다5.

class(x); class(y); class(z); class(today)
## [1] "numeric"
## [1] "character"
## [1] "logical"
## [1] "Date"

한편 typeof() 함수를 요소들의 원시적인 데이터 타입을 확인시켜 줍니다.

x1 <- c(1, 2, 3)                # double 형 벡터입니다. 숫자형 클래스입니다
x2 <- c(1L, 2L, 3L)             # integer 형 벡터입니다. 이 또한 숫자형 클래스입니다.
class(x1)                       # x1의 클래스는 numeric 입니다.
## [1] "numeric"
class(x2)                       # x2의 클래스도 integer 입니다.
## [1] "integer"
typeof(x1)                      # x1의 데이터 유형은 double 입니다.
## [1] "double"
typeof(x2)                      # x2의 데이터 유형은 integer 입니다.
## [1] "integer"
date <- c("2020-01-01", "2021-01-01"); date     # date는 문자형 벡터입니다.
## [1] "2020-01-01" "2021-01-01"
date1 <- as.Date(date); date1                   # as.Date() 함수를 이용하여 날짜형 벡터로 강제변환했습니다.
## [1] "2020-01-01" "2021-01-01"
class(date)                     # date의 클래스는 character입니다.
## [1] "character"
class(date1)                    # date1의 클래스는 Date입니다.
## [1] "Date"
typeof(date)                    # date의 데이터 유형은 character입니다.
## [1] "character"
typeof(date1)                   # date1의 데이터 유혀은 double입니다. (실수형)
## [1] "double"

class() 함수와 typeof() 함수 (그리고 mode() 함수)의 차이에 대하여는 이 자료를 참고하시기 바랍니다6.

5.3.0.3 세션에서 사용 중인 모든 변수의 유형 확인하기

참고로 지금 사용중에 있는 모든 객체의 데이터 유형을 확인하기 위해서는 다음가 같은 명령을 사용하면 됩니다.

sapply(ls(), typeof)
##        date       date1    myString        num1        num2          pi 
## "character" "character" "character" "character" "character" "character" 
##           s     sum_1_2       today        True           v       var.1 
## "character" "character" "character" "character" "character" "character" 
##       var.2       var.3           x          x1          x2          x3 
## "character" "character" "character" "character" "character" "character" 
##           y          y1          y2           z 
## "character" "character" "character" "character"
eapply(.GlobalEnv,typeof)
## $s
## [1] "list"
## 
## $y1
## [1] "character"
## 
## $y2
## [1] "character"
## 
## $num1
## [1] "double"
## 
## $num2
## [1] "double"
## 
## $v
## [1] "double"
## 
## $x
## [1] "double"
## 
## $var.1
## [1] "double"
## 
## $y
## [1] "character"
## 
## $z
## [1] "logical"
## 
## $var.2
## [1] "character"
## 
## $sum_1_2
## [1] "double"
## 
## $var.3
## [1] "double"
## 
## $myString
## [1] "character"
## 
## $today
## [1] "double"
## 
## $pi
## [1] "double"
## 
## $x1
## [1] "double"
## 
## $True
## [1] "double"
## 
## $x2
## [1] "integer"
## 
## $date1
## [1] "double"
## 
## $date
## [1] "character"
## 
## $x3
## [1] "complex"

5.3.1 벡터 요소의 갯수 확인

length(x); length(y); length(z); length(today)
## [1] 1
## [1] 3
## [1] 4
## [1] 1

  1. R에서의 클래스와 개체에 대해서는 제3부의 제5장을 참고하시기 바랍니다↩︎

  2. https://buillee.tistory.com/83↩︎