본문 바로가기
5. 자료구조/3) 배열 | array()

R 배열(array)정의, 이름 지정

by makhimh 2020. 1. 31.
반응형

R 배열(array)정의, 이름 지정


배열은 행렬과 벡터를 포함하는 개념입니다. 벡터는 1차원 배열이고, 행렬은 2차원 배열입니다. 배열은 n차원까지 정의가 가능합니다. 


배열은 array 함수를 이용하여 정의합니다. 행렬에서는 nrow 또는 ncol을 이용하여 행 또는열의 수를 지정했습니다. 배열에서는 각 차원에 나열될 줄 수를 정의해야합니다. 




1. array 함수로 벡터 정의


먼저 배열을 이용하여 벡터를 정의하는 것으로 시작합시다. 원소가 4개인 벡터를 정의하겠습니다.


> v1=array(c(1,2,3),dim=c(3))

> v1

[1] 1 2 3


dim=c(3)은 1차원이고 줄 수가 3개라는 말입니다. 괄호 안에 있는 수의 개수가 차원이고, 수의 값이 줄 수 입니다. 방금 정의된 벡터는 열벡터일까요 행벡터일까요 아니면 일반벡터일까요? 여기서 일반벡터는 R에서 c()를 이용하여 정의하는 벡터를 의비합니다. 일반벡터는 상황에 따라 행벡터로 행동하기도 하고 열벡터로 행동하기도 합니다. 일반벡터에 대한 설명은 (https://rbasall.tistory.com/14) 를 참고하시면 됩니다. 


class를 확인해보면 array인데, 일반벡터처럼 행동합니다. 


> class(v1)

[1] "array"


array 함수를 이용하여 행벡터를 정의하고 싶다면 아래와 같이 정의하면 됩니다. 


> v2=array(c(1,2,3),dim=c(1,3))

> v2

     [,1] [,2] [,3]

[1,]    1    2    3




2. array 함수로 행렬 정의


이번에는 array 함수로 행렬을 정의해봅시다. array 함수의 작동원리를 이해하기 위해 벡터와 행렬을 정의해보는 것입니다.


먼저 matrix로 행렬을 정의합시다.


> m1=matrix(c(1,2,3,4,5,6),nrow=2)

> m1

     [,1] [,2] [,3]

[1,]    1    3    5

[2,]    2    4    6


위 행렬을 array 함수로 정의해보겠습니다. 


> a1=array(c(1,2,3,4,5,6),dim=c(2,3))

> a1

     [,1] [,2] [,3]

[1,]    1    3    5

[2,]    2    4    6


dim(2,3)의 의미는 dim(행2개,열3개) 라는 의미입니다. class를 보니 matrix입니다. array함수로 행렬을 정의하면 class가 배열이 아닌 행렬로 지정되나봅니다. 


> class(a1)

[1] "matrix"




3. array 함수로 3차원 배열 정의


차원을 하나 늘려봅시다. 행렬을 높이방향으로 쌓아놓은 것이라고 생각하면 됩니다. 


2행 3열의 행렬을 4층 쌓은 배열을 정의합시다. 


> a2=array(1:24,dim=c(2,3,4))


> a2

, , 1


     [,1] [,2] [,3]

[1,]    1    3    5

[2,]    2    4    6


, , 2


     [,1] [,2] [,3]

[1,]    7    9   11

[2,]    8   10   12


, , 3


     [,1] [,2] [,3]

[1,]   13   15   17

[2,]   14   16   18


, , 4


     [,1] [,2] [,3]

[1,]   19   21   23

[2,]   20   22   24




4. n차원 배열 정의


원리만 말씀드리겠습니다. 아래와 같은 형식으로 입력합니다. 


array(벡터, dim=c(a1,a2,a3,...,an))


한가지 조건만 만족되면 배열이 정의됩니다. 


벡터의 원소 수와, a1부터 an 까지의 곱이 같으면 됩니다. 



5. 배열의 차원별 이름 정의


dinames 함수를 사용합니다. 리스트 형태로 입력합니다. 위에서 정의한 배열을 가져옵시다.


> a2=array(1:24,dim=c(2,3,4))

> a2

, , 1


     [,1] [,2] [,3]

[1,]    1    3    5

[2,]    2    4    6


, , 2


     [,1] [,2] [,3]

[1,]    7    9   11

[2,]    8   10   12


, , 3


     [,1] [,2] [,3]

[1,]   13   15   17

[2,]   14   16   18


, , 4


     [,1] [,2] [,3]

[1,]   19   21   23

[2,]   20   22   24


차원별 이름을 입력하겠습니다. 


> dimnames(a2)=list(c("x1","x2"),c("y1","y2","y3"),c("z1","z2","z3","z4"))


> a2

, , z1


   y1 y2 y3

x1  1  3  5

x2  2  4  6


, , z2


   y1 y2 y3

x1  7  9 11

x2  8 10 12


, , z3


   y1 y2 y3

x1 13 15 17

x2 14 16 18


, , z4


   y1 y2 y3

x1 19 21 23

x2 20 22 24




6. 자료구조 확인


자료 구조를 확인하는 함수는 class, typeof, mode가 있습니다. 배열인지 여부를 확인하는 함수는 as.array입니다. 


> a=array(1:24,dim=c(2,3,4))


> class(a)

[1] "array"


> mode(a)

[1] "numeric"


> str(a)

 int [1:2, 1:3, 1:4] 1 2 3 4 5 6 7 8 9 10 ...


> typeof(a)

[1] "integer"


> is.array(a)

[1] TRUE


반응형

댓글