벡터는 앞 포스팅의 ":", seq()로도 만들 수 있지만, 이들은 오로지 수로 이루어진 벡터만 만들 수 있는 한계가 존재한다. 그 때문에 좀 더 넓은 범위에서 사용할 수 있는 c() 함수가 자주 사용되는데, 이에 대해 알아보자. 참고로 vector() 함수는 거의 이용되지 않는 듯.
1. c()
c()를 이용하여 여러 타입의 벡터를 만들 수 있다. c()를 통해 여러 리스트를 결합할 수도 있는데, 이는 다음에.
e.g.
> c(1, 2, 3, 4, 5)
[1] 1 2 3 4 5
> c(1:5)
[1] 1 2 3 4 5
> c("A", "B", "c")
[1] "A" "B" "c"
> c(TRUE, FALSE)
[1] TRUE FALSE
c() 함수는 위와 같이 괄호 속에 들어간 데이터를 벡터 형식으로 표현해주며, 내부에 ":" 등 여러 다른 함수들을 넣어 표현할 수 있다. 기본적으로 벡터는 모든 데이터의 유형이 같은 구조를 띄어야 하기 때문에, 같은 데이터 유형의 값들을 넣어주어야 한다.
만일 데이터 유형이 다른 자료를 넣어주게 되더라도 r 상에서는 자료형을 자동으로 바꿔주며, 이를 coercion(전환)이라고 한다. 예를 통해 알아보자.
e.g.
> c(2, "A")
[1] "2" "A"
> c(2, TRUE)
[1] 2 1
위와 같이 서로 다른 데이터 유형의 자료를 넣어주면 벡터의 정의에 따라 한 유형으로 바꿔줌을 알 수 있다. 2와 "A"를 같이 넣어준 경우, 더 상위 레벨인 character 형식으로 2를 바꿔주며, 2와 TRUE를 같이 넣어준 경우 더 상위 레벨인 numeric 형식으로 TRUE를 바꿔준다. 이를 좀 더 세세하게는 implicit coercion이라고 한다.
coercion에는 일정한 위계관계가 있으며, 그것은 다음과 같다.
NULL < raw < logical < integer < double < complex < character < list < expression
이외에 explicit coercion도 존재하지만, 이는 다음에 다루겠다.
● recursive =
c() 함수의 도움말을 살펴보면, c() 함수에는 recursive라는 옵션을 조정할 수 있음을 알 수 있다. recursive는 재귀, 혹은 반복을 뜻하는데, 이 옵션을 통해 단순히 자료들을 결합할지, 연결된 구조로 결합할지를 정할 수 있다. 기본적으로 c()에서는 recursive = FALSE로 설정되어 있다.
recursive=TRUE는 여러 리스트를 연결된 구조로 합칠 때 사용한다. 아래 예를 통해 단순히 알아보고 리스트에서 다시 보자.
e.g.
> c(list(1, 2, c(list(5, 6))))
[[1]]
[1] 1
[[2]]
[1] 2
[[3]]
[[3]][[1]]
[1] 5
[[3]][[2]]
[1] 6
> c(list(1, 2, c(list(5, 6))), recursive=TRUE)
[1] 1 2 5 6
위의 예를 보면, recursive=TRUE라는 조건을 추가하니 원래 리스트 형식이었던 자료 구조가 벡터로 합쳐졌음을 알 수 있다.
2. vector()
vector() 함수는 vector(mode=" ", length= )의 구조를 가지고 있다.
mode에는 자료형을, length에는 벡터의 길이를 입력한다.
e.g.
> vector(mode = "logical", length = 3)
[1] FALSE FALSE FALSE
> vector(mode = "character", length = 3)
[1] "" "" ""
> vector(mode = "numeric", length = 2)
[1] 0 0
이런 식으로 자료형과 길이를 정해주면 그에 맞춰 벡터가 생성되는데, 어떤 경우에 사용하는지는 모르겠다. vector() 함수는 그 자체로 보다는 as.vector()와 is.vector()를 통해 사용되는 경우가 많은 듯하다.
as.vector()는 다른 데이터 구조를 벡터로 변환하며, is.vector()는 데이터가 벡터인지를 판별한다. mode= 옵션을 통해 벡터 속 데이터 유형을 결정할 수 있다.
e.g.
> x <- matrix(1:6, nrow=2)
> x
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> as.vector(x)
[1] 1 2 3 4 5 6
> as.vector(x, mode="character")
[1] "1" "2" "3" "4" "5" "6"
> y <- 1:5
> is.vector(y)
[1] TRUE
> is.vector(y, mode="character")
[1] FALSE
'R Programming' 카테고리의 다른 글
R Programming-":" 와 seq(), rep() 함수 (0) | 2021.01.05 |
---|---|
R Programming-데이터 유형과 데이터 구조 (0) | 2021.01.01 |
댓글