더북(TheBook)

행렬은 matrix( )를 사용해 표현한다. 다음은 1, 2, 3, 4, 5, 6, 7, 8, 9로 구성된 3×3(3행 3열) 행렬을 만드는 방법을 보여준다.

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

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

위의 예에서 볼 수 있듯이 행렬 생성 시에는 행렬 값을 나열한 뒤 ncol을 사용해 열의 수를 지정하거나 nrow를 사용해 행의 수를 지정한다. 이 예에서는 byrow 값이 생략되어 FALSE므로 행렬 값이 좌측 열부터 채워졌다(열 우선column major). 행렬 값을 위쪽 행부터 채우고 싶다면(행 우선row major) byrow=TRUE를 지정한다.

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

행렬의 행과 열에 명칭을 부여하고 싶다면 dimnames에 리스트로 행, 열의 이름을 지정한다. 리스트 내 첫 번째 벡터는 행의 이름, 두 번째 벡터는 열의 이름이어야 한다.

> matrix(1:9, nrow=3,
+        dimnames=list(c("r1", "r2", "r3"), c("c1", "c2", "c3")))
   c1 c2 c3
r1  1  4  7
r2  2  5  8
r3  3  6  9

이미 만들어진 행렬에는 dimnames( )를 사용해 이름을 부여할 수 있다.

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

> dimnames(x) <- list(c("r1", "r2", "r3"), c("c1", "c2", "c3"))
> x
   c1 c2 c3
r1  1  4  7
r2  2  5  8
r3  3  6  9

dimnames( )가 행 이름과 열 이름을 한 번에 지정하는 것과 달리 rownames( ), colnames( )는 각각 행 이름, 열 이름 지정을 위해 특화된 함수다. 다음은 행 이름과 열 이름을 차례로 rownames( )와 colnames( )를 사용해 부여하는 예다.

> x <- matrix(1:9, ncol=3)
> rownames(x)  # 행 이름이 없으므로 NULL이 반환됨
NULL
> rownames(x) <- c("r1", "r2", "r3")
> x
   [,1] [,2] [,3]
r1    1    4    7
r2    2    5    8
r3    3    6    9
> colnames(x) <- c("c1", "c2", "c3")
> x
    c1 c2 c3
r1   1  4  7
r2   2  5  8
r3   3  6  9
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.