갈루아의 반서재

1. numeric




수를 입력하는 경우 기본적으로 numeric 으로 저장된다. 

> calc1 = 1 + 1

> calc1

[1] 2


변수의 데이터 타입을 알고자하는 경우 아래 class() 함수를 이용한다.

> class(calc1)

[1] "numeric"




> numbers1 = c(1, 2, 3)

> numbers1

[1] 1 2 3

> class(numbers1)

[1] "numeric"


위의 예를 보면 하나의 수가 아니므로 벡터가 아닌가라는 생각이 들 것이다. 

여기서 트릭은 c() 함수는 값들을 연결해주는 concatenate 함수이라는 점에 있다. 

각각의 값이 numeric 이므로 그 값들을 결합한  1 2 3 역시 numeric 이다. 


2. integer



> numbers2 = 1:3

> numbers2

[1] 1 2 3

> class(numbers2)

[1] "integer"


위의 예를 방금 살펴본 1) 의 마지막 예와 상충되는 게 아닌가 하는 생각을 할 수 있다.

c() 함수로 연결한 경우는 numeric 이고 방금의 경우는 integer 인가?

그 의문에 대한 답은 numeric 클래스가 integer 클래스를 포함하는 더 넓은 개념이라는 데서 찾을 수 있다.

integer 타입으로만 연결된 값에 대해서는 R 프로그램은 numeric 보다 더 상세한 데이터 타입인 integer 로 저장한다. 

그 배경에는 더 디테일한 데이터 타입을 선택할수록 그 값을 저장하는 데는 메모리가 덜 소모되기 때문이다. 


그러면 앞선 예에서 numbers1 은 왜 integer 로 저장하지 않았느냐는 의문을 가질 수 있다. 

그 이유는 c() 함수를 이용해서 값을 입력했기 때문이다. 

R 은 c() 함수에 들어가는 값에 대해서는 체크하지 않는다. 

어떤 수라도 넣을 수 있도록 단순히 numeirc 이라고 가정한다. 


> numbers3 = 1.1:3

> numbers3

[1] 1.1 2.1

> class(numbers3)

[1] "numeric"


이 경우에는 R 은 입력된 수가 integer 가 아닌 것을 알고 좀 더 넓은 범위의 클래스인 numeric 으로 할당한다.



3. character

텍스트가 저장되는 character 타입에 대해 살펴보자.



> char1 = "Hello World!"

> char1

[1] "Hello World!"

> class(char1)

[1] "character"


앞에서 본 것처럼 c() 로 결합된 값 역시 character 클래스에 속한다.


> char2 = c("red","green","blue")

> class(char2)

[1] "character"


수와 텍스트가 결합된 경우에는 모두 character 타입으로 변환된다. 


> combined1 = c(1, "test", 3.3)

> combined1

[1] "1"    "test" "3.3" 

> class(combined1)

[1] "character"


이제 위의 1 또는 3.3 은 더 이상 수가 아니다. 더하거나 빼거나 등의 연산을 이제 수행할 수 없다.