[03-5] R언어 - array 의 상세

Language/R 2017.11.24 15:07 posted by TechNote.kr


R언어의 기본이 되는 object의 종류는 다음과 같다..



본 글에서는 array의 사용에 대해 설명한다.


  1. array의 기본
  2. array에의 접근
  3. array의 계산


1. array의 기본



R언어에서 array는 일반적으로 알려져 있는 것과 같이 같은 mode(type)의 데이터가 연속적으로 나열되어 있는 구조를 의미한다.

1차원, 2차원, 3차원 및 고차원으로 선언이 가능하다. 


array는 다음과 같이 선언한다. 


a <- array(data_vector, dim_vector)

data_vector 는 실제 array에 포함될 데이터 값을 vector 형태로 표현한 것이고,
dim_vector는 해당 data_vector가 표현될 차원에 대한 정보이다. 


1차원 array의 예)

> a1 <- array(1:12,dim=c(12))
> a1
 [1]  1  2  3  4  5  6  7  8  9 10 11 12



2차원 array의 예)

> a2 <- array(1:12,dim=c(3,4))
> a2
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12



3차원 array의 예)

> a3 <- array(1:12,dim=c(2,2,3))
> a3
, , 1

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

, , 2

     [,1] [,2]
[1,]    5    7
[2,]    6    8

, , 3

     [,1] [,2]
[1,]    9   11
[2,]   10   12




2. array에의 접근


vector나 matrix 일 때와 마찬가지로 접근이 가능하다. 


'[', ']'를 이용해서 각 element에 바로 접근가능하고, 특정 row나 column에 일괄적 접근도 가능하다. 


1차원 array 로의 접근 예)

> a1[3]
[1] 3



2차원 array 로의 접근 예)

> a2[2,1]
[1] 2


> a2[,1]
[1] 1 2 3


> a2[2,]
[1]  2  5  8 11



3차원 array 로의 접근 예)

> a3[1,1,2]
[1] 5


> a3[,2,]
     [,1] [,2] [,3]
[1,]    3    7   11
[2,]    4    8   12


> a3[1,1,]
[1] 1 5 9




3. array의 계산


만약 같은 dimension의 array 끼리 계산 한다면 별다른 문제가 없을 것이다. 


같은 dimension의 array 계산의 예)


> a <- array(1:8,dim=c(2,2,2))
> b <- array(seq(from=2,to=16,by=2),dim=c(2,2,2))
> 
> a
, , 1

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

, , 2

     [,1] [,2]
[1,]    5    7
[2,]    6    8

> b
, , 1

     [,1] [,2]
[1,]    2    6
[2,]    4    8

, , 2

     [,1] [,2]
[1,]   10   14
[2,]   12   16

> 
> a+b
, , 1

     [,1] [,2]
[1,]    3    9
[2,]    6   12

, , 2

     [,1] [,2]
[1,]   15   21
[2,]   18   24


위와 같이 같은 위치에 있는 element끼리 계산되었음을 확인할 수 있다. 
하지만 만약 서로 다른 dimension을 가진 array, 혹은 vector 또는 matrix와 섞여서 계산을 한다면 어떻게 될까.

  • 먼저 다른 dimension을 가진 array 끼리는 연산이 되지 않는다.
> b = array(6:12,dim=c(2,3))
> c = array(6:13,dim=c(2,4))
> b+c
Error in b + c : non-conformable arrays


다만 하나의 예외가 있다. 


  • vector와 array 와는 연산이 가능하다.
    단, vector의 크기는 array 보다 작아야 한다. (recycling rule 적용)


> a = 1:3
> b = array(6:12,dim=c(2,3))
> a+b
     [,1] [,2] [,3]
[1,]    7   11   12
[2,]    9   10   14


먼저 vector는 연산하려는 array와 dimension을 맞춘 뒤 부족한 element 들은 자신이 가지고 있던 값들을 반복해서 채워 넣는다.


즉, 위의 예에서 a는 아래와 같이 인식되어 계산된다. (recycling은 column을 기준으로 진행된다.)

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


하지만 만약 연산하려는 vector가 array의 element의 수보다 클 경우는 다음과 같은 에러가 발생하고 연산이 되지 않는다.

> a = 1:20
> b = array(6:12,dim=c(2,3))
> a+b
Error: dims [product 6] do not match the length of object [20]
In addition: Warning message:
In a + b : longer object length is not a multiple of shorter object length




    
TAG , ,