1. 개요
(1) 정의 : 동일한 형태로 구성된 2차원의 데이터 구조, 행의 차원과 열의 차원을 가지고 있음
(2) 특징
① 하나의 행렬은 수치형, 문자형, 논리형 중 한 가지 형태의 원소만 갖음
② 행렬은 벡터의 확장, 행렬의 속성은 벡터의 속성을 포함함
(3) 속성
속성 |
설명 |
length |
자료의 개수 |
mode |
자료의 형태 |
dim |
행과 열의 개수 |
dimnames |
행과 열의 이름 |
2. 행렬의 생성
(1) matrix( )
- 함수를 이용하여 직접 생성
- 형태 : matrix(data, nrow=, ncol=, byrow=FALSE, dimnames = NULL)
→ byrow=FALSE : 기본값, 열기준으로 행렬 생성한다는 의미
(2) cbind( )
- 함수를 이용하여 벡터를 병합
- 형태 : cbind(벡터1, 벡터2, …)
(3) rbind( )
- 함수를 이용하여 벡터를 병합
- 형태 : rbind(벡터1, 벡터2, …)
(4) dim( )
- 함수를 이용하여 차원(행과 열의 개수)을 직접 지정
- 형태 : dim(x) <- c(행의 개수, 열의 개수)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #3행 3열 행렬 생성 matr = matrix(1:9, nrow = 3) dimnames(matr) = list(paste("row", c(1:3)), paste("col", c(1:3))) #원소의 개수 length(matr) # 원소의 형태 mode(matr) #행과 열의 개수 dim(matr) #rbind - 열로 결합 r1 = c(1,4,7) r2 = c(2,5,8) r3 = c(3,6,9) rbind(r1,r2,r3) #cbind - 행으로 결합 c1 = 1:3 c2 = 4:6 c3 = 7:9 cbind(c1,c2,c3) #dim - 3행 3열로 지정. m1 = 1:9 dim(m1) = c(3,3) |
3. 행렬의 연산
(1) [ ]
- 행렬의 일부 원소 추출
- 형태 : 행렬명[원소번호 또는 조건문, …]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #행렬의 연산 #행 기준 3열의 행렬 mat = matrix(c(1,2,3,4,5,6,7,8,9), ncol=3, byrow=T) #행렬 mat의 1행의 값 mat[1,] #행렬 mat의 3열의 값 mat[,3] # 3열에서 4보다 큰 행의 값 중 2열의 모든 값 mat[mat[,3]>4,2] # 2행 3열의 값 추출 mat[2,3] |
(2) apply( )
- 배열 또는 행렬에 함수를 적용하여 결과를 벡터, 배열 또는 리스트로 반환
- 행 또는 열 연산
- 형태 : apply(행렬, 조건 (1은 행, 2는 열, c(1,2)는 행과 열), FUN, …)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #apply() 함수 height = c(140,155,142,175) size.1 = matrix(c(130,26,110,24,118,25,112,25), ncol=2, byrow=T, dimnames=list(c("Lee", "Kim", "Park", 'Choi'), c("Weight", "Waist"))) size = cbind(size.1, height) # 2 : 열의 평균값 계산 colmean = apply(size, 2, mean) colmean # 1 : 행의 평균값 계산 rowmean = apply(size, 1, mean) rowmean # 2: 열의 분산값을 계산 colvar = apply(size, 2, var) colvar # 1 : 행의 분산값을 계산 rowvar = apply(size, 1, var) rowvar |
(3) sweep( )
- 행 또는 열 연산, 기본 연산이 뺄셈으로 지정되어 있음
- 형태 : sweep(행렬, 조건 (1은 행, 2는 열, c(1,2)는 행과 열), STATS, FUN="-", …)
→ 'STATS' : 연산에 활용되는 통계량이나 데이터
1 2 3 4 5 6 7 8 9 10 11 12 13 | #sweep() 함수 #size 각 열의 값과 colmean의 차 sweep(size, 2, colmean) #size 각 행의 값과 rowmean의 차 sweep(size, 1, rowmean) # size 각 행의 값에 c(1,2,3,4)값을 더해줌 sweep(size, 1, c(1,2,3,4), "+") # size 각 행의 값에 c(1,2,3,4)값을 빼줌 sweep(size, 1, c(1,2,3,4), "-") |
4. 행렬의 연산
연산자 및 함수 |
기능 |
사용법 |
t |
전치행렬 구하는 함수 |
t(A) |
%*% |
행렬의 곱셈 |
A%*%B |
crossprod |
t(A)%*%B |
crossprod(A,B) |
outer |
외적 구하는 함수 |
outer(A,B) |
svd |
singular value 분해 |
svd(A) |
qr |
QR 분해함수 |
qr(A) |
solve |
방정식의 근 구하는 함수 |
solve(A,B) |
역행렬 구하는 함수 |
solve(A) |
|
eigen |
고유치와 고유벡터 함수 |
eigen(A) |
chol |
Choleski 분해 함수 |
chol(A) |
'프로그래밍 > R' 카테고리의 다른 글
[R 코드] 웹사이트 크롤링 (0) | 2018.12.19 |
---|---|
[데이터구조] 벡터 (0) | 2018.10.29 |
댓글