top of page
  • 작성자 사진JC.kim

[R Programming] 기본 연산과 Vector




이번에는 R studio에서 기본 연산과 function에 대해 알아보자. 아래의 코드를 보자.

여기서 x2 vector를 1,4,9 로 선언하였다. 3번 line 부터 sqrt ,min,max,mean함수는 차례로 제곱근,최솟값,최댓값,평균을 나타낸다. 계산 결과는 오른쪽과 같이 나온다. 그리고 8번 line은 x2 vector에 2를 더하여 새로운 vector y2를 선언하였다. x2의 선형적인 transform의 예이다. 이제 이 x와 y를 plot 해보자. 결과는 아래처럼 나온다.

R 언어는 위처럼 연산에 대한 메서드만 알면 쉽게 계산이 가능하다. 만약 연산에 대한 기능을 찾아보고싶다면, 저번에 이야기한 help 함수를 이용하면 될것이다.

이제 함수 메서드에 대해 알아보자. 아래 로그와 자연함수에 관한 함수 계산이 나와있다.

line 3은 10진법 log에 대해 10을 계산하였다. line 4 처럼 log뒤에 숫자를 따로 붙이지 않으면 자연로그로 계산된다. 자연함수는 line5 처럼 쓸 수 있으며, line 7과 같이 sin, cos,tan 과 같은 삼각함수의 계산도 용이하다. line 9는 여태까지 만들었던 object가 모두 출력되고, line 13은 생성된 object에서 불필요한 object를 넣어 제거할 수 있다. R studio는 여러가지 R 파일에 대해 동시에 Object를 생성할수 있기에, object를 겹치지 않게 사용하는 것도 중요하다.

이번에는 통계함수의 사용에 대해 알아보자. 정규분포로 부터 Data를 형성하여 (100개) 평균과 편차, 최솟값과 최댓값을 구하는 방법은 아래와 같다.


여기서 rnorm 이라는 메서드를 사용하였는데, 이는 random number generating form normal distribution의 약자로, "정규분포를 띄는 data를 무작위로 100개 생성한다." 라는 뜻이다. 이 함수의 초기값은 평균 0 (mean=0) , 표준편차 1 (std=1) 로 정해져 있다. 평균과 표준편차를 바꾸고 싶으면 x3<-rnorm( 100 , 20 , 5) 같이 써주면 된다. 차례대로 객체수, 평균, 표준편차를 의미한다.

line 4의 head는 생성된 무작위 데이터중 맨 앞 6개의 데이터만 보여준다. 그리고 이 통계량의 Histogram을 보고싶으면 line 10 처럼 써주면 된다. 그러면 아래와 같은 그래프가 출력된다.

위와 같은경우, 무작위 데이터의 갯수가 너무 적어 (100개) histogram의 분포가 정규분포를 띄지 않는것 처럼 보인다. 우리는 여기서 통계적인 중요한 성질을 알 수 있는데, Sample수 (객체수) 가 많아야 오차가 줄어들고 산포의 모양이 대칭적으로 된다는 것을 알 수 있다.

그럼, sample수와 mean, std를 바꾸어 정규분포를 다시그려보자.


이번에는 그래프가 분포를 잘 띄는 것을 볼 수있다. 이와 같이 R 언어는 통계적 데이터를 작성하거나 분석함에 있어, 어렵지 않은 메서드를 제공해 데이터 처리에 편리함을 제공하고 있다.

참고할 사항은 R언어는 대/소문자를 다르게 인식하는 언어이다. 그래서 대소문자가 섞여있는 Data나 변수를 다룰때 아래 메서드를 이용하면 유용하게 처리할 수있다.

tolower() , toupper()

첫번째는 해당 객체의 문자를 모두 소문자로 바꾼다. 두번째는 해당 객체의 문자를 모두 대문자로 바꿔준다.

이렇게 기본적인 연산과 기본 통계데이터에 대해 알아보았다. 이번엔 R언어에서 Vector를 어떻게 쓰고 다루는지 알아보자. 벡터의 생성은 앞에서 본 바와 같이,


x<-c(1,2,3,4,5)

처럼 선언 하여 쓸 수있다. x 벡터에, 1,2,3,4,5 값이 들어가 있다. 이 vector에서 특정 위치의 값을 찾고 싶다면, 대괄호를 이용하여 찾을 수 있다.


x[3]

이는 x벡터의 3번째 값을 출력해준다. 위의 벡터에서 3번째 값인, 3이 출력 될 것이다. 그리고 (-) 음의 부호를 이용하면 subset을 해줄수 있다.


x[-1]

이는 x 벡터의 첫번 째 값을 제외한 나머지를 정의할 것이다. 출력은 2,3,4,5, 값이 도출될 것이다. subset을 이용하여, vector 내 특정 위치의 값을 삭제할 수 있다.


x1<-x[-c(1,2)]

위의 결과는 x 벡터에서 첫번째 값과 두번째 값을 삭제한 x1 벡터를 생성할 것이다. x1을 출력하면 3,4,5 가 나올 것이다. 중간에 (,) 부호가 아닌 (:) 부호를 사용하면 범위를 지정하여 subset 해줄 수 있다.


x2<-x[-c(1:4)]

위의 값은 x 벡터에서 1부터 4번째 값까지 제외시킨 x2벡터를 만들것이다. x2는 5만 객체를 갖는 벡터가 될 것이다.


다음은 sequence함수와 replication 반복함수에 대해 알아보자. 먼저 sequence 함수는 생성함수로써, 범위나 간격을 지정하여 원하는 갯수의 값을 생성하는 함수이다.


y1 <- seq(0,20 , length =10)

위와 같이 쓰이며, 0부터 20까지 10개의 값을 생성하라는 뜻이다. 또 간격을 부여할 때는


y2 <- seq(0,10 , by=2)

by를 사용하며, 0부터 10까지 2간격으로 값을 생성한다. replication 반복함수는 특정 수를 패턴화 해서 반복할 때 사용하며,


z1 <- rep(1:5, 3)

위와 같은 경우는 숫자1에서 5까지 3번 반복한 값을 나타낸다. 출력을 한다면, 1,2,3,4,5,1,2,3,4,5,1,2,3,4,5 라고 출력 될 것이다. 아래 코드와 생성된 값들을 확인해 보자.



환경창에서는 보다싶이, y1, y2 벡터는 numeric, z1은 integer 값이 나왔음을 볼 수 있다.


이번에는 Matrix에 대해 간단히 알아보자. 먼저 벡터끼리 서로 결합해보자. 벡터는 기본적으로 matrix로 나타낼 수 있어, 결합을 행으로 할지(row) 열로 할지(column) 중요하다. 열 기준으로 결합할때, 우리는 cbind를 사용한다. 행으로 결합을 할때는 rbind로 결합을 한다.


x <- c(1,2,3,4,5)

y <- c(6,7,8,9,10)

z1 <- cbind(x, y)


이렇게 결합을 하면, column 결합이 된다. (5x2 matrix)


x <- c(1,2,3,4,5)

y <- c(6,7,8,9,10)

z2 <- rbind(x, y)


이렇게 결합을 하면, row 결합이 된다. (2x5 matrix) 이때 주의할 점은 벡터끼리 결합을 할때, 서로 동일한 길이를 가진 벡터끼리 결합해야 한다.



Matrix를 생성하고 싶을때엔, nrow와 ncol를 사용하여 만들 수 있다. nrow는 행의수, ncol은 열의 수로 써, 원하는 행렬 (axb) 를 만들수 있다.


m <- matrix(1:30, nrow=3)

1부터 30까지 수를 3개의 행을 가진 행렬을 만들 수 있다. 열도 동일하게 만들수 있으며, 숫자는 1열부터 차례로 채워 나간다. 행부터 채워서 숫자를 입력하고 싶을땐, byrow를 사용한다.


m2 <- matrix(1:30, nrow =3, byrow=T)

또한 우리는 고차원의 행렬을 만들고자 할때, array를 사용하여 행렬을 만들 수 있다.


a <- array(c(1:32), dim=c(4,4,2))

1부터 32까지의 정수를 4x4행렬로 2개를 만들수 있다.




여기까지 R언어의 기본연산과 Function 그리고 vector 와 matrix에 대해 알아보았다. 다음엔 객체와 데이터 프레임에 대해 공부해 볼 것이다.

위의 내용은 포항공과대학교 인터넷 강의(MOOC)를 바탕으로 작성하였다. 매 학기마다 인터넷 무료강좌가 열리며, 일정만큼 수료를 하면 수료증도 준다.



AI. 빅데이터, IoT관련 수업을 들을 수 있으므로, 참고해서 강의를 들으면 더 도움이 될 것이다.

조회수 209회댓글 0개

최근 게시물

전체 보기

bottom of page