티스토리 뷰
이번에는 R의 함수에 대해서 살펴보도록 하자.
일반적인 C나 자바의 함수와 유사하기 때문에 큰 어려움은 없을 것이다.
R 함수는 다음과 같은 형태로 만들 수 있다.
f <- function(arguments) {
## 함수 내용 작성
}
R 함수의 인수(argument)
R 함수에서 사용하는 인수중 먼저 "..." 부터 살펴보도록 하자.
R 도움말에서 "..."을 처음 봤을때, 이게 뭔가 했던 기억이 있다.
"..." 은 인수로 갯수에 상관없이 여러개가 넘어 올 수 있다는 것을 나타낸다.
대표적으로 문자열을 결합하는데 사용하는 paste를 통해 알아보자.
paste 함수의 구조는 다음과 같다.
앞부분에 "..."이 있는 것은 연결해야 할 문자열의 개수를 미리 지정할 수 없기 때문이다.
그래서 아래 예제와 같이 2개나 5개의 문자열을 한번에 연결할 수 있다.
만약 연결할 구분자로 sep를 지정할 경우에는 두번째 경우와 같이 sep라는 이름을 정확하게 지정해 줘야한다.
paste()를 통해서 "..." 인수를 살펴봤지만 아래와 같이 이름과 성을 붙이는 경우 등 많이 사용하므로 잘 알아두자.
그리고 R에는 기본값이 설정된 인수들이 많다.
기본값이 지정되어 있을 경우, 해당 값을 넣지 않으면 기본값으로 결과를 리턴한다.
정규분포를 따르는 임의의 수를 생성하는 rnorm()의 경우, 평균과 표준편차가 기본값으로 각각 0과 1로 지정되어 있다.
R 함수 만들기
이제 본격적으로 R 함수를 직접 만들어보면서 테스트해보도록 하자.
R에는 mean이라는 평균을 구하는 함수가 있지만, 데이터 합을 개수로 나누는 평균 함수를 직접 만들어보자.
평균을 구하기 위해 인수 my_vector의 합을 구하고, 그 값을 my_vector의 길이로 나눈 것이다.
벡터 값 c(3, 4, 5)를 입력으로 결과를 테스트하면 잘 나오는 것을 확인할 수 있다.
이어서 인수의 기본값을 가지는 함수를 만들어 보자.
나머지를 구하는 함수를 만들면 다음과 같다. 분모를 기본값으로 2로 설정한 부분을 잘 살펴보기 바란다.
remainder(divisor = 3, 5)와 같이, 인수의 이름을 지정할 경우 순서대로 작성하지 않아도 된다.
그러나 인수 이름을 지정하지 않았을 때는 반드시 함수의 인수 순서대로 값을 넣어줘야 한다.
마지막으로 인수로 함수를 사용하는 경우를 만들어보자.
evaluate 함수는 인수로 넘어온 함수를 그대로 실행하는 함수이다.
이런 경우, 기본적인 함수를 지정해도 되지만,
인수에 바로 새로운 함수를 작성하는 익명 함수도 적용할 수 있다.
두 번째 인수의 값에 1을 더해 출려하는 익명 함수와
벡터 c(3, 4, 5)로 넘어온 인수의 마지막 값을 출력하는 익명 함수 등이 가능하다.
함수를 함수의 인수로 넘길 수 있다는 점을 기억해 두기 바란다.
미니의 R 주요 강좌...
R의 lapply, sapply, vapply를 이해하자~
'Cloud&BigData > R' 카테고리의 다른 글
R 함수에서 캐시 활용하기~ (0) | 2015.10.12 |
---|---|
R 시뮬레이션 - 랜덤 변수 샘플링 (0) | 2015.10.08 |
R의 split 활용 (0) | 2015.10.05 |
R의 apply, tapply의 활용법을 알아보자~ (0) | 2015.10.01 |
R의 lapply, sapply, vapply를 이해하자~ (0) | 2015.09.29 |
- Total
- Today
- Yesterday
- 마케팅
- HTML
- 도서
- mysql
- java
- ms
- 디자인
- fingra.ph
- 자바스크립트
- 자바
- 구글
- 모바일
- 아이폰
- SCORM
- 클라우드
- 책
- 분석
- 안드로이드
- 통계
- Hadoop
- XML
- r
- 프로젝트
- 빅데이터
- 하둡
- 애플
- 맥
- 웹
- 세미나
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |