행렬 데이터 접근

    행렬은 색인 또는 행과 열의 이름을 통해 접근할 수 있다.

    표 2-15 행렬 데이터 접근 문법

    문법

    의미

    A[ridx, cidx]

    행렬 A의 ridx행, cidx열에 저장된 값. 이때 ridx나 cidx에 벡터를 사용해 여러 값을 지정가능함. ridx나 cidx 중 하나를 생략하면 전체 행 또는 열을 의미함

    행렬의 각 요소는 x[ridx, cidx] 형태로 접근한다. 이때 색인은 벡터의 경우와 마찬가지로 1부터 시작한다.

    > (x <- 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
    > x[1,1]
    [1] 1
    > x[1,2]
    [1] 4
    > x[2,1]
    [1] 2
    > x[2,2]
    [1] 5
    

    역시 벡터와 마찬가지로 ‘-색인’ 형태로 음수를 사용해 특정 행이나 열을 제외하거나, 색인에 벡터를 지정해 여러 값을 한 번에 가져올 수 있다. 만약 특정 행이나 열의 전체를 가져오고 싶다면 행이나 열에 아무런 색인도 기재하지 않으면 된다.

    다음 코드는 1, 2행의 데이터를 가져온다.

    > x[1:2, ]
        [,1] [,2] [,3]
    [1,]   1    4    7
    [2,]   2    5    8
    

    같은 결과를 얻기 위해 3행을 제외하는 방법을 쓸 수도 있다.

    > x[-3, ]
         [,1] [,2] [,3]
    [1,]    1    4    7
    [2,]    2    5    8
    

    색인에는 벡터를 지정할 수 있다. 다음은 1행, 3행, 1열, 3열의 값만 추출하는 경우다.

    > x[c(1, 3), c(1, 3)]
         [,1] [,2]
    [1,]    1    7
    [2,]    3    9
    

    만약 dimnames를 통해 행과 열에 이름을 부여했다면 그 이름을 직접 사용할 수도 있다. 다음은 r1이라는 이름을 부여한 첫 번째 행의 모든 열을 가져오는 예다.

    > (x <- 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
    > x["r1", ]
    c1 c2 c3
     1  4  7
    
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.