[03-4] R언어 - matrix 의 상세

Language/R 2017.11.08 19:12 posted by TechNote.kr


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



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


  1. matrix의 기본
  2. matrix에의 접근
    1. 자세한 argument 설명
      1. data
      2. nrow
      3. ncol
      4. byrow



1. matrix의 기본


Matrices를 한마디로 정의하면 

table과 같은 2차원 vector

라고 할 수 있다. 


완전히 동일하지는 않지만 C언어의 2차원 배열과 유사하다.


Matrices는 matrix function을 통해 다양한 방법으로 생성 가능하다.


먼저 matrix function의 definition은 아래와 같다.


matrix(data = NA, nrow = 1, ncol = 1, byrow = FALSE, dimnames = NULL)


matrix 생성 예)

> matrix(c(1,3,5,7,9,2),ncol=3)
     [,1] [,2] [,3]
[1,]    1    5    9
[2,]    3    7    2



위의 예와 같이 vector를 생성하기 위해 사용했던 다양한 방법들과 matrix function을 이용해서 생성한다. 


matrix function에 대해 좀 더 깊은 이해를 위해 다양한 argument에 대해서 알아보면 다음과 같다.




2. matrix에의 접근


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



위와 같이 3x3 matrix가 있다고 했을 때 특정 위치의 element에는 m[x,y] 형식으로 접근하면 된다. 

반면 특정 row 전체 가져오고 싶을 때는 column 란을 비워 놓는 방식으로 값을 가져올 수 있다. 



2.1. 자세한 Argument 설명


2.1.1. data


실제 데이터가 들어가는 부분으로 vector mode로 들어간다. 해당 vector를 바탕으로 matrix를 구성하는데, 이 때의 vector 생성 방법은 [R언어 vector]에 언급된 방법과 동일하다.


c function을 이용한 예)

> matrix(c(1,3,5,7,9,2),ncol=3)
     [,1] [,2] [,3]
[1,]    1    5    9
[2,]    3    7    2



colon operator를 이용한 예)

> matrix(1:6,ncol=3)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6

seq function을 이용한 예)


> matrix(seq(from=1,to=6),ncol=3)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6


req function을 이용한 예)

> matrix(rep(1:3,c(1,2,3)),ncol=3)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    2    3    3



2.1.2. nrow


matrix의 row(행)의 수를 정의하는 부분이다. 해당 nrow 값에 따라 matrix의 모양이 아래와 같이 달라진다.


> matrix(1:6,nrow=2)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6


> matrix(1:6,nrow=3)
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6



2.1.3. ncol


matrix의 col(열)의 수를 정의하는 부분이다. 해당 ncol 값에 따라 matrix의 모양이 아래와 같이 달라진다.


> matrix(1:6,ncol=2)
     [,1] [,2]
[1,]    1    4
[2,]    2    5
[3,]    3    6


> matrix(1:6,ncol=3)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6



그렇다면 nrow와 ncol이 현재 주어진 data argument와 매칭되지 않는다면 어떻게 될까?


> matrix(1:6,nrow=3,ncol=3)
     [,1] [,2] [,3]
[1,]    1    4    1
[2,]    2    5    2
[3,]    3    6    3

위와 같이 data 내용이 반복되면서 nrow와 ncol에 정의한 matrix 모양에 맞춰지는 것을 볼 수 있다. 



2.1.4. byrow


byrow argument는 data의 값들을 row를 기준으로 채울 것인지 column을 기준으로 채울 것인지 정한다. 


> matrix(1:6,ncol=3,byrow=TRUE)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6


> matrix(1:6,ncol=3,byrow=FALSE)
     [,1] [,2] [,3]
[1,]    1    3    5
[2,]    2    4    6