Programing/R- programming

R프로그래밍에서 matrix 다루기

sosal 2014. 8. 21. 10:48
반응형

/*

 http://sosal.kr/
 * made by so_Sal
 */


1. Matrix 선언하기

matrix( data, nrow, ncol, byrow = FALSE)


data: 행렬에 들어가는 데이터

nrow: row(행)의 수

ncol: column(열)의 수

byrow: 기본적으로 열(column)을 기준으로 숫자가 들어감 (FALSE)

           TRUE로 지정할 시 행(row) 기준으로 숫자가 들어간다.


> mat = matrix(1:20, nrow=5, ncol=4)

> mat

     [,1] [,2] [,3] [,4]

[1,]    1    6   11   16

[2,]    2    7   12   17

[3,]    3    8   13   18

[4,]    4    9   14   19

[5,]    5   10   15   20


행열 요소 추출, 치환


> mat[1,1]

[1] 1

> mat[, 2] # 빈칸이면 해당 인덱스의 모든인자 추출

[1]  6  7  8  9 10


> mat[ c(3,4), ] # 벡터를 이용하여 여러 데이터 동시 추출 가능

     [,1] [,2] [,3] [,4]

[1,]    3    8   13   18

[2,]    4    9   14   19


> mat [1,1] = 99 # Matrix의 치환

> mat

     [,1] [,2] [,3] [,4]

[1,]   99    6   11   16

[2,]    2    7   12   17

[3,]    3    8   13   18

[4,]    4    9   14   19

[5,]    5   10   15   20


> mat[5,] <- c(55,66,77,88) # 벡터를 이용하여 치환

> mat

     [,1] [,2] [,3] [,4]

[1,]   99    6   11   16

[2,]    2    7   12   17

[3,]    3    8   13   18

[4,]    4    9   14   19

[5,]   55   66   77   88


> sum(mat) # 메트릭스에 함수 적용 가능

[1] 544



apply(X, MARGIN, FUN, ...)

Returns a vector or array or list of values obtained by applying a function to margins of an array or matrix.


apply함수: row/column 단위의 연산을 쉽고 간결하게 하게 해준다.


X: matrix

margin: 1 (row), 2(column)


apply(mat,1, sum) # mat matrix의 row별 합 구하기

apply(mat, 2, sd) # mat matrix의 column별 표준편차 구하기


> mat = matrix(1:20, ncol=4, nrow=5)

> mat

     [,1] [,2] [,3] [,4]

[1,]    1    6   11   16

[2,]    2    7   12   17

[3,]    3    8   13   18

[4,]    4    9   14   19

[5,]    5   10   15   20

> apply(mat, 1, sum)

[1] 34 38 42 46 50

> apply(mat, 2, sd)

[1] 1.581139 1.581139 1.581139 1.581139



 operator

설명 

A + B 

행렬 A와 B의 합 

A * B 

행렬 A,B의 element의 곱. (행렬곱연산이 아니다) 

A %*% B 

행렬 A와 B의 곱연산 

A / B 

행렬 A, B의 element 나눗셈 

det(A) 

A의 determinant 

solve(A) 

A의 역행렬 

eigen(A) 

A의 eigenvalue와 eigenvector (고유값, 고유벡터) 

t(A) 

A의 transposition 




Matrix에 row/colum 추가하기


colum에 추가하기

> mat = matrix(1:20, ncol=4, nrow=5)

> mat
     [,1] [,2] [,3] [,4]
[1,]    1    6   11   16
[2,]    2    7   12   17
[3,]    3    8   13   18
[4,]    4    9   14   19
[5,]    5   10   15   20
> cbind(mat, c(21:25) )
     [,1] [,2] [,3] [,4] [,5]
[1,]    1    6   11   16   21
[2,]    2    7   12   17   22
[3,]    3    8   13   18   23
[4,]    4    9   14   19   24
[5,]    5   10   15   20   25

> mat = matrix(1:20, ncol=4, nrow=5)
> rbind(mat, c(26:29) )
     [,1] [,2] [,3] [,4]
[1,]    1    6   11   16
[2,]    2    7   12   17
[3,]    3    8   13   18
[4,]    4    9   14   19
[5,]    5   10   15   20
[6,]   26   27   28   29