2014년 가을학기 손시운 (ssw5175@kangwon.ac.kr) 지도 교수: 문양세 교수님 행렬과 배열 2014년 가을학기 손시운 (ssw5175@kangwon.ac.kr) 지도 교수: 문양세 교수님
행렬과 배열 배열(네이버 지식백과) 행렬 일정한 규칙에 따라 몇몇 요소가 나열되어 있는 데이터 집합 배열은 차원을 가짐 행의 개수와 열의 개수라는 두 가지 속성을 추가로 갖는 벡터 행렬은 ‘배열’의 특이한 형태로, 2차원 배열이 곧 행렬 행렬은 벡터이므로 숫자형이나 문자형 같은 형식을 가짐 1열 2열 3열 1행 [1,1] [1,2] [1,3] 2행 [2,1] [2,2] [2,3]
행렬의 생성 (1/2) R에서 행렬의 내부 저장 공간은 ‘열 우선 배열column-major order’ 방식 행렬에 데이터를 저장 시, 1번 열, 2번 열 … 순으로 저장 matrix() 함수: 행렬을 만드는 함수 nrow, ncol 인수: 행과 열의 수를 지정하는 인수 4개의 벡터에 대해 2*2행렬을 생성 nrow와 ncol 인수를 모두 지정할 필요는 없음
행렬의 생성 (2/2) 행렬의 각 원소를 지정하는 경우 행 우선 배열 방식(입력 시에만 가능): byrow 인수 사용
일반 행렬 연산 (1/4) 선형대수 연산 행렬 간 곱, 행렬-상수 간 곱, 행렬 간 합 같은 선형 대수 연산이 가능
일반 행렬 연산 (2/4) 행렬 인덱싱 행렬은 벡터이므로, 벡터와 유사하게 인덱싱이 가능 인덱스에 음수를 사용하여 특정 원소를 제외할 수 있음
일반 행렬 연산 (3/4) 행렬 인덱싱 부분행렬에 값을 할당할 수 있음
일반 행렬 연산 (4/4) 행렬 필터링
행과 열에 함수 적용 *apply()군 함수: apply(), tapply(), lapply() 등 함수를 각 행이나 열에 적용하는 함수 apply(m, dimcode, f, flags) m은 행렬, f는 적용할 함수, flags는 f에 필요한 인수의 집합 dimcode는 차원 수(1인 경우 함수를 행에, 2인 경우 열에 적용) 위 코드는 행렬 m에서 각 열의 평균을 구할 경우
행과 열 추가 및 제거 행렬은 행이나 열을 추가 또는 삭제할 수 없음 rbind(), cbind() 함수 행렬은 벡터이므로 고정된 길이와 차원을 가지고 있기 때문 따라서 벡터와 같이 ‘재할당’을 통해 추가/삭제한 효과를 기대해야 함 rbind(), cbind() 함수 인수의 행렬들을 묶어서 행렬로 재할당하는 함수
벡터 및 행렬의 정확한 구분 행렬은 단순히 벡터지만 행과 열의 숫자라는 두 개의 추가적인 속성을 가짐 함수를 통해 차원 및 행과 열의 수를 확인할 수 있음
의도하지 않은 차원 축소 (1/2) 차원 축소 행렬에서 연산할 때, 의도하지 않은 차원 축소가 발생할 수 있음 통계에서 불필요한 차원을 제거하고, 핵심 데이터로 데이터를 간소화 행렬에서 연산할 때, 의도하지 않은 차원 축소가 발생할 수 있음 행렬 m에서 일부 데이터를 추출하였으나, 결과는 행렬이 아닌 벡터
의도하지 않은 차원 축소 (2/2) R은 이런 차원 축소를 막을 수 있도록 drop 인수를 제공 행렬을 다루는 코드에는 drop=FALSE 인수를 습관적으로 사용하는 것이 용이 벡터를 행렬처럼 다루고 싶다면, as.matrix() 함수를 사용
행과 열에 이름 생성 행렬의 행과 열은 보통 인덱스 숫자로 통칭 특정 데이터 세터를 분석할 경우 이름을 부여하는 것이 유용하게 사용
고차원 배열 (1/2) 2차원 구조의 배열인 행렬은 가장 빈번히 사용 경우에 따라 통계적 관점에서 고차원(3차원 이상) 배열이 요구 e.g.) 3명의 학생이 국어, 영어 시험을 두 번씩 봤을 때의 성적 데이터
고차원 배열 (2/2) array() 함수: 배열을 생성하는 함수 dim 인수를 통해 차원을 정의