[R] R에서 행렬(matrix) 생성 시 byrow 옵션 설명

r-matrix-byrow

해당 포스트는 R에서 행렬(matrix)을 생성할 때 사용되는 byrow 옵션에 대해 설명 합니다.

1. INTRO

R에서 2차원 형태의 데이터를 생성할 때에는 주로 행렬(Matrix)이나 데이터 프레임(Data Frame)을 사용하게 됩니다. 그 중에서도 숫자로만 이루어진 경우, 행렬(Matrix)을 주로 사용하게 되는데 이 때 자주 사용하는 byrow 옵션에 대해 설명합니다.

2. R에서 행렬(matrix) 생성

일반적으로 R에서 행렬(Matrix)을 생성하려 할 때에는 시퀀스 숫자를 바로 사용하거나 임의의 벡터를 생성 후 사용합니다. 아래는 동일한 행렬을 생성하는 다른 방식의 예시입니다.

1) 연속된 숫자로 행렬 생성

matrix(1:9, nrow = 3)
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

2) 벡터 생성 후 행렬 생성

my_vec <- c(1,2,3,4,5,6,7,8,9)
matrix(my_vec, nrow = 3)
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

3. byrow 옵션 사용

위에서 설명한 기본적인 행렬 생성 방법에 byrow 옵션을 사용한다면 사용자가 원하는 형태의 행렬을 생성할 수 있습니다.

byrow?
byrow 옵션은 행렬을 생성할 때, 원소 값을 채우는 방향 설정에 사용합니다. 기본값(Default)은 byrow = F로 원소값을 열 방향(세로)로 채우게 되며, 만약 행 방향(가로)로 채우고 싶다면 byrow = T로 설정해 주시면 됩니다.

1) 연속된 숫자로 행렬 생성 (byrow 사용 비교)

아래는 1부터 9까지의 수로 행렬을 생성하면서 행의 수는 3개이고 열 방향으로 값을 채우는 코드입니다.

값이 채워지는 순서

  1. (1, 1)
  2. (2, 1)
  3. (3, 1)
  4. (1, 2)
  5. ...
matrix(1:9, nrow = 3)
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

아래는 1부터 9까지의 수로 행렬을 생성하면서 행의 수는 3개이고 행 방향으로 값을 채우는 코드입니다.

값이 채워지는 순서

  1. (1, 1)
  2. (1, 2)
  3. (1, 3)
  4. (2, 1)
  5. ...
matrix(1:9, nrow = 3, byrow = T)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9

2) 벡터 생성 후 행렬 생성 (byrow 사용 비교)

아래는 1부터 9까지의 숫자가 들어있는 my_vec 변수를 생성하고, matrix() 함수로 행렬을 생성하는 코드입니다. byrow 옵션 유무에 따라 출력 결과가 달라지는 것을 확인할 수 있습니다.

my_vec <- c(1,2,3,4,5,6,7,8,9)
matrix(my_vec, nrow = 3)
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9
my_vec <- c(1,2,3,4,5,6,7,8,9)
matrix(my_vec, nrow = 3, byrow = T)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9

3) 행렬 구조의 값을 사용하는 경우

아래와 같이 데이터가 이미 행렬 구조로 잡혀있는 경우, 아래와 같이 byrow = T 옵션을 적용해주면 됩니다. 아래 예시는 3 x 3 행렬을 생성하기 때문에 nrow = 3, byrow = T 옵션을 설정해 주었습니다.

matrix(c(1,2,3,
         4,5,6,
         7,8,9), nrow = 3, byrow = T)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9

4. 관련 링크

[1] [R] 리스트 내 행렬들의 열합계(colSums) 구하기
[2] [R] 행렬 생성 및 부분 행렬 추출
[3] [R] 행렬곱 함수 직접 구현하기 (feat. For반복문)


banner-request-analysis