본문 바로가기
R Programming

R Programming- c(), vector() 함수

by 카멜리아 시넨시스 2021. 1. 13.
반응형

  벡터는 앞 포스팅의 ":", 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

 

 

 

 

 

 

반응형

댓글