728x90

R은 통계프로그래밍 언어로 일반인이 사용하기 쉽게 만든 언어이다.

그러나 필자는 프로그래머이고 비 프로그래머의 인식으로 접근하기 힘든면이 있다.

강의 또한 그러하다. 강의 곳곳에 프로그래머적인 시선이 들어있으니 참고하여 필요없으면 넘겨라.


참고:

[개발환경 셋팅하기]R설치 및 환경변수 등록-(1)

[개발환경 셋팅하기]RStudio설치-(2)

[개발환경 셋팅하기]RStudio프로젝트 만들기-(3)


벡터가 기본되는 데이터형이라면 행렬역시 기본되는 데이터형중 하나라고 할 수 있다.

1차원은 벡터와는 2차원인 행렬(이하 매트릭스) 다른 언어의 2차원 배열과는 조금 맥락이 다르다.

사용방식은 여러가지가 있지만 기본적으로는 아래와 같은 형식으로 사용한다.


mat = matrix(c(1,2,3,4,5,6),2,3)

print(mat)

colnames(mat)<-c('1열','2열','3열')

rownames(mat)<-c('1행','2행')

print(mat)


매트릭스를 만드는 가장 기본적인 방법은 matrix함수를 사용하는 것이다.

matrix함수는 먼저 안에 순회가능한 타입(예를들자면 벡터)를 넣고 행의 수와 열의 수를 적어주면된다.

이렇게 만들어진 matrix는 행이름과 열이름이 존재치 않는다.

따라서 우리가 행이름과 열이름을 붙혀넣어줘야하는데 이 데이터역시 벡터로 넣어주면된다.



다른 방식으로도 매트릭스를 만들 수 있다.

예를들면 같은 크기의 벡터를 쌓아서 만드는것 역시 가능하다.


vec1 <- c(1,2,3)

vec2 <- c(4,5,6)

vec3 <- c(7,8,9)


mat1 <- rbind(vec1,vec2,vec3)

mat2 <- cbind(vec1,vec2,vec3)


print(mat1)

print(mat2)


이 코드를 사용하면 vec1과 vec2와 vec3를 쌓아서 만드는 것이 가능하다.

그리고 출력을 해보면 결과는 다음과 같다.


rbind는 한 벡터를 한 행으로 가정하고 쌓는 방법이다.

반대로 cbind는 한 벡터를 한 행으로 가정하고 쌓는 방법이다.

또한 매트릭스를 이용해서 맨트릭스를 만드는 방법역시 가능하다. 방법은 아래와 같다.


mat <- matrix(c(1,2,3,4,5,6),2,3)

colnames(mat)<-c('1열','2열','3열')

rownames(mat)<-c('1행','2행')


matEx <- matrix(mat,4,6)

print(matEx)


이 코드의 경우 이미 만들어진 2,3 매트릭스로 4,6매트릭스를 만든것이다.

결과를 확인해 보자.



매트릭스의 연산


mat = matrix(c(1,2,3,4,5,6),2,3)

colnames(mat)<-c('1열','2열','3열')

rownames(mat)<-c('1행','2행')


print(mat+2)

print(mat-2)

print(mat*2)

print(mat-2)


매트릭스의 4칙연산은 모두가 예상하는 결과가 나온다.



맥트릭스에 벡터를 연산하면 어떻게 될까?

mat = matrix(c(1,2,3,4,5,6),2,3)

vec = c(10,20,30)


colnames(mat)<-c('1열','2열','3열')

rownames(mat)<-c('1행','2행')


print(mat+vec)

print(mat-vec)

print(mat*vec)

print(mat-vec)



보면 벡터를 계산할 경우 먼저 열순서로 계산하고 다음 행으로 넘어가서 마지막 계산이 실행된다.


mat = matrix(c(1,2,3,4,5,6),2,3)

mat2 = matrix(c(10,20,30,40,50,60),2,3)


colnames(mat)<-c('1열','2열','3열')

rownames(mat)<-c('1행','2행')


print(mat+mat2)

print(mat-mat2)

print(mat*mat2)

print(mat-mat2)


매트릭스끼리 연산을 할경우 둘의 행,열의 갯수를 맞춰주어야한다.


매트릭스의 원소 추출


mat = matrix(c(10,20,30,40,50,60),2,3)


colnames(mat)<-c('1열','2열','3열')

rownames(mat)<-c('1행','2행')


print(mat[5])


print(mat[1,])

print(mat[,1])


print(mat[,-1])

print(mat[,c(1,3)])

print(mat[,2:3])


매트릭스의 원소를 추출하는것은 벡터와 똑같다.

일단 mat[5]라는 구문은 매트릭스에서 5번째 벡터를 추출하라는 이야기인데 열부터 시작해서 행으로 넘어가므로 값은 50이 추출된다.

mat[1,]는 매트릭스의 1행을 모두 출력해라는 뜻이며 반대로 mat[,1]는 매트릭스의 1열을 모두 출력해라는 뜻이다.

mat[,-1]라고 음수 구문이 있는데 이 구문은 파이썬에서의 뜻과는 달리 1열을 지우고 출력해라는 뜻이다.

mat[,c(2,3)]은 2열과과 3열을 골라서 출력해라는 뜻이다.

mat[,2:3]은 슬라이싱으로 2부터 3열까지를 출력해라는 뜻이다.




'Programming > R' 카테고리의 다른 글

[R-06]리스트(list)  (0) 2017.11.18
[R-05]데이터 프레임(Data Frame)  (0) 2017.11.18
[R-03]벡터(vector)  (0) 2017.11.17
[R-02]기본 연산자  (0) 2017.11.15
[R-01]Hello World  (0) 2017.11.15

+ Recent posts