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()
함수를 요소들의 원시적인 데이터 타입을 확인시켜 줍니다.
<- c(1, 2, 3) # double 형 벡터입니다. 숫자형 클래스입니다
x1 <- c(1L, 2L, 3L) # integer 형 벡터입니다. 이 또한 숫자형 클래스입니다.
x2 class(x1) # x1의 클래스는 numeric 입니다.
## [1] "numeric"
class(x2) # x2의 클래스도 integer 입니다.
## [1] "integer"
typeof(x1) # x1의 데이터 유형은 double 입니다.
## [1] "double"
typeof(x2) # x2의 데이터 유형은 integer 입니다.
## [1] "integer"
<- c("2020-01-01", "2021-01-01"); date # date는 문자형 벡터입니다. date
## [1] "2020-01-01" "2021-01-01"
<- as.Date(date); date1 # as.Date() 함수를 이용하여 날짜형 벡터로 강제변환했습니다. date1
## [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
R에서의 클래스와 개체에 대해서는 제3부의 제5장을 참고하시기 바랍니다↩︎