행렬 데이터 접근
행렬은 색인 또는 행과 열의 이름을 통해 접근할 수 있다.
문법 |
의미 |
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