8.1 배열의 생성
배열은 2 차원 이상의 데이터를 저장할 수있는 R 데이터 객체입니다. 예를 들어, 3 차원 배열 (2, 3, 4)을 생성하면 각각 2 개의 행과 3 개의 열이있는 4 개의 직사각형 행렬이 생성됩니다. 배열은 데이터 유형만 저장할 수 있습니다.
array()
함수를 사용하여 배열을 만듭니다. 벡터를 입력으로 사용하고 dim
매개 변수의 값을 사용하여 배열을 만듭니다.
array(data = NA, dim = length(data), dimnames = NULL)
data
: 배열을 생성할 데이터입니다.dim
: 배열의 차원을 나타내는 정수형 벡터입니다. 예,dim = c(2, 3, 4)
dimnames
: 리스트 형태의 각 차원의 이름입니다.
예
다음 예제에서는 2 X 3 X 4
배열을 생성합니다. 이는 2 X 3
행렬이 4
개 있는 것과 같습니다. 따라서 전체 요소의 갯수는 2 X 3 X 4 = 24
개가 됩니다.
# 2 X 3 X 4 배열을 생성을 위한 요소 data를 생성합니다.
set.seed(10) # 난수 발생 지점을 정합니다.
<- sample(1:20, 24, rep=TRUE) # 요소 생성 : 1:20 사이의 숫자 24개를 임의로 복원추출합니다.
data data
## [1] 11 9 10 16 12 8 7 19 15 15 10 7 10 2 13 8 14 7 6 7 18 18 13 5
# 생성된 data를 array() 함수를 이용하여 배열로 전환합니다.
.1 <- array(data, dim = c(2, 3, 4)) # 배열을 생성합니다.
arr.1 arr
## , , 1
##
## [,1] [,2] [,3]
## [1,] 11 10 12
## [2,] 9 16 8
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 7 15 10
## [2,] 19 15 7
##
## , , 3
##
## [,1] [,2] [,3]
## [1,] 10 13 14
## [2,] 2 8 7
##
## , , 4
##
## [,1] [,2] [,3]
## [1,] 6 18 13
## [2,] 7 18 5
배열을 생성할 때 제일 왼쪽의 2개의 차원으로 구성되는 행렬이 “기본 행렬”을 이룹니다. 그리고 다음 차원의 갯수가 바로 이 기본행렬의 갯수를 정하는 것입니다. 즉, 위의 에에서 arr.1
베열을 (2 X 3)
행렬을 기본행렬로 하여 이 기본 행렬이 4
개 만들어지는 형태의 배열이 되는 것입니다.
한편 배열을 생성할 때 data
의 요소의 갯수가 배열의 전체 요소의 갯수와 일치하지 않는 경우의 배열 생성에 대하여 살펴 보겠습니다. 이러한 경우는 data
의 요소가 자동 반복(recycling)되어 배열의 요소로 채워집니다.
# 12개의 요소로 구성된 벡터 data를 생성합니다.
set.seed(10) # 난수 발생 지점을 정합니다.
<- sample(1:20, 12, rep=TRUE) # 요소 생성 : 1:20 사이의 숫자 24개를 임의로 복원추출합니다.
data data
## [1] 11 9 10 16 12 8 7 19 15 15 10 7
# 2 X 3 X 4 배열을 생성합니다.
.2 <- array(data, dim = c(2, 3, 4)) # 배열의 전체 갯수가 24개여야 하는데, data의 요소 갯수는 12개 입니다.
arr.2 # data의 12개 요소가 자동 반복되어 배열의 요소로 입력됩니다. arr
## , , 1
##
## [,1] [,2] [,3]
## [1,] 11 10 12
## [2,] 9 16 8
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 7 15 10
## [2,] 19 15 7
##
## , , 3
##
## [,1] [,2] [,3]
## [1,] 11 10 12
## [2,] 9 16 8
##
## , , 4
##
## [,1] [,2] [,3]
## [1,] 7 15 10
## [2,] 19 15 7
8.1.1 차원의 이름 지정
8.1.1.1 차원별 요소들의 이름 지정
dimnames
매개 변수에 리스트를 사용하여 배열의 각 차원의 요소들에 대한 이름을 지정할 수 있습니다.
# array() 함수에 dimnames 인수에 배열의 각 차원의 이름을 지정합니다.
.3 <- array(data, dim = c(2, 3, 4), # 2 X 3 X 4 배열을 생성합니다.
arrdimnames = list(c("male", "female"), # 첫 번째 차원의 이름을 지정합니다.
c("low", "middle", "high"), # 두 번째 차원의 이름을 지정합니다.
c("S", "A", "B", "C"))) # 세 번째 차원의 이름을 지정합니다.
.3 # 각 차원의 이름이 출력됩니다. arr
## , , S
##
## low middle high
## male 11 10 12
## female 9 16 8
##
## , , A
##
## low middle high
## male 7 15 10
## female 19 15 7
##
## , , B
##
## low middle high
## male 11 10 12
## female 9 16 8
##
## , , C
##
## low middle high
## male 7 15 10
## female 19 15 7
8.1.1.2 차원의 이름 지정
한편, names()
함수를 이용하여 각 차원의 이름을 지정할 수 있습니다. 즉 첫번째 차원은 “Gender
,” 두분째 차원은 “Level
” 그리고 세 번째 차원은 “Grade
” 등의 이름을 부여해 보겠습니다.
names(dimnames(arr.3)) <- c("Gender", "Level", "Grade")
.3 # 각 차원별로 이름이 지정된 것을 확인할 수 있습니다. arr
## , , Grade = S
##
## Level
## Gender low middle high
## male 11 10 12
## female 9 16 8
##
## , , Grade = A
##
## Level
## Gender low middle high
## male 7 15 10
## female 19 15 7
##
## , , Grade = B
##
## Level
## Gender low middle high
## male 11 10 12
## female 9 16 8
##
## , , Grade = C
##
## Level
## Gender low middle high
## male 7 15 10
## female 19 15 7
str(arr.3) # arr.3 배열의 구조를 확인해 보겠습니다.
## int [1:2, 1:3, 1:4] 11 9 10 16 12 8 7 19 15 15 ...
## - attr(*, "dimnames")=List of 3
## ..$ Gender: chr [1:2] "male" "female"
## ..$ Level : chr [1:3] "low" "middle" "high"
## ..$ Grade : chr [1:4] "S" "A" "B" "C"