[R 쉽게 설명하기] 배열 생성하기 (arry() 함수)
1. 배열 생성
안녕, 여러분! 오늘은 R에서 배열을 만드는 방법을 배워보려고 해요. 배열은 숫자나 글자를 담을 수 있는 상자라고 생각하면 돼요. 이 상자들을 규칙적으로 쌓아 올리면 배열이 완성되는 거예요.
1.1. array() 함수로 배열 만들기
# 1에서 18까지의 숫자를 담은 3행 3열의 배열을 2개 만들어볼까요?
arr <- array(1:24, c(3, 3, 2))
arr
, , 1
[,1] [,2] [,3]
[1,] 1 4 7
[2,] 2 5 8
[3,] 3 6 9
, , 2
[,1] [,2] [,3]
[1,] 10 13 16
[2,] 11 14 17
[3,] 12 15 18
와, 두 개의 3x3 배열이 만들어졌네요! 숫자들이 차곡차곡 들어가 있어요.
1.2. 배열의 차원에 이름 붙이기
# 배열의 차원마다 이름을 붙일 수도 있어요.
dimnames(arr) <- list(paste("row", c(1:3)), paste("col", c(1:3)), paste("ar", c(1:2)))
arr
, , ar 1
col 1 col 2 col 3
row 1 1 4 7
row 2 2 5 8
row 3 3 6 9
, , ar 2
col 1 col 2 col 3
row 1 10 13 16
row 2 11 14 17
row 3 12 15 18
이제 배열의 행, 열, 그리고 각 배열마다 이름이 붙었죠? 이렇게 하면 나중에 배열의 특정 부분을 찾기 쉬워져요.
1.3. 배열의 정보 확인하기
length(arr) # 배열의 전체 원소 개수
mode(arr) # 배열에 담긴 값의 유형
dim(arr) # 배열의 차원(행, 열, 배열 수)
dimnames(arr) # 각 차원의 이름
> length(arr)
[1] 18
> mode(arr)
[1] "numeric"
> dim(arr)
[1] 3 3 2
> dimnames(arr)
[[1]]
[1] "row 1" "row 2" "row 3"
[[2]]
[1] "col 1" "col 2" "col 3"
[[3]]
[1] "ar 1" "ar 2"
배열에 대한 여러 가지 정보를 확인할 수 있어요. 전체 원소가 몇 개인지, 어떤 유형의 값이 들어있는지, 몇 차원 배열인지 등을 알 수 있죠.
1.4. 다양한 차원의 배열 만들기
# 1~6까지의 숫자로 1차원 배열 만들기
array(1:6)
[1] 1 2 3 4 5 6
# 1~6까지의 숫자로 2차원 배열 만들기
array(1:6, c(2,3))
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
# 1~8까지의 숫자로 3차원 배열 만들기
array(1:8, c(2,2,2))
, , 1
[,1] [,2]
[1,] 1 3
[2,] 2 4
, , 2
[,1] [,2]
[1,] 5 7
[2,] 6 8
원하는 숫자들로 1차원, 2차원, 3차원 등 다양한 배열을 만들 수 있어요. array() 함수의 첫 번째 부분에는 배열에 넣을 값들을, 두 번째 부분에는 각 차원의 크기를 넣으면 돼요.
# 1~24까지의 숫자로 3행 4열짜리 배열 2개 만들기
arr <- c(1:24)
dim(arr) <- c(3, 4, 2)
arr
, , 1
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
, , 2
[,1] [,2] [,3] [,4]
[1,] 13 16 19 22
[2,] 14 17 20 23
[3,] 15 18 21 24
dim() 함수를 사용하면 이미 만들어진 배열의 차원을 바꿀 수도 있답니다.
이렇게 해서 배열을 만드는 방법을 배웠어요. 처음에는 조금 어려울 수 있지만 차근차근 연습하다 보면 금방 익숙해질 거예요. 다음 시간에는 배열로 할 수 있는 여러 가지 연산을 배워보도록 하죠!
2. 배열의 연산
안녕하세요, 친구들! 저번 시간에는 배열을 만드는 방법을 배웠죠? 오늘은 배열로 할 수 있는 재미있는 연산들을 알아보려고 해요. 두 개의 배열을 더하거나 곱하는 것처럼 말이에요.
2.1. 배열 만들기
# 1~8까지의 숫자를 담은 2x2 배열 2개를 만들어볼까요?
arr1 <- array(1:8, dim = c(2, 2, 2))
arr2 <- array(8:1, dim = c(2, 2, 2))
arr1
arr2
> arr1
, , 1
[,1] [,2]
[1,] 1 3
[2,] 2 4
, , 2
[,1] [,2]
[1,] 5 7
[2,] 6 8
> arr2
, , 1
[,1] [,2]
[1,] 8 6
[2,] 7 5
, , 2
[,1] [,2]
[1,] 4 2
[2,] 3 1
arr1과 arr2, 두 개의 배열이 만들어졌어요. arr1은 숫자가 1부터 8까지 순서대로 들어가 있고, arr2는 8부터 1까지 거꾸로 들어가 있네요.
2.2. 배열의 덧셈
# 배열끼리 덧셈을 해볼까요?
arr1 + arr2
, , 1
[,1] [,2]
[1,] 9 9
[2,] 9 9
, , 2
[,1] [,2]
[1,] 9 9
[2,] 9 9
arr1과 arr2를 더하니 모든 원소가 9가 되었어요. 왜냐하면 배열의 덧셈은 같은 위치에 있는 원소끼리 더하기 때문이에요. 1+8=9, 2+7=9, 3+6=9, 이런 식으로요.
2.3. 배열의 곱셈
# 배열끼리 곱셈도 해볼까요?
arr1 * arr2
, , 1
[,1] [,2]
[1,] 8 18
[2,] 14 20
, , 2
[,1] [,2]
[1,] 20 14
[2,] 18 8
배열의 곱셈도 같은 위치에 있는 원소끼리 곱해요. 1x8=8, 2x7=14, 3x6=18, 이런 식으로 계산되는 거죠.
2.4. 배열 원소들의 곱의 합
# 두 배열 원소들의 곱을 모두 더해볼까요?
arr1 %*% arr2
[,1]
[1,] 120
%*% 기호를 사용하면 배열의 원소들끼리 곱한 값을 모두 더할 수 있어요. 여기서는 (1x8)+(3x6)+(2x7)+(4x5)+...+(6x3)+(8x1) = 120이 되는 거예요.
2.5. 배열 원소의 추출과 삭제
# 배열의 일부분만 뽑아낼 수도 있어요.
arr1[,,1] # 첫 번째 배열만 추출
[,1] [,2]
[1,] 1 3
[2,] 2 4
arr1[1,1,] # 모든 배열의 1행 1열 추출
[1] 1 5
arr1[1,,-2] # 두 번째 배열을 제외한 1행 추출
[1] 1 3
배열의 특정 부분만 뽑아내거나 삭제할 수 있어요. 대괄호 안에 원하는 위치를 쉼표로 구분해서 써주면 돼요. 빈 자리는 그 차원 전체를 의미해요.
자, 이제 배열로 할 수 있는 다양한 연산을 배웠네요. 배열끼리 더하고 곱하고, 원하는 부분만 추출하는 것까지. 배열은 데이터를 다루는 데 정말 유용해요. 게임 속 아이템 목록이나 성적 관리 같은 것들도 배열로 만들 수 있겠죠?
여러분도 직접 배열을 만들고 연산해보면서 감을 익혀보세요. 어떤 걸 만들어볼까요? 상상력을 발휘해서 정말 멋진 배열 작품을 만들어보시길 바래요.