일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 통계학
- linear regression
- 고구려
- 창평
- categorical variable
- 한서
- 유주
- 히스토그램
- 독사방여기요
- 통계
- 단군
- 기자조선
- 태그를 입력해 주세요.
- 우분투
- 기자
- 지리지
- t test
- 풍백
- spss
- 패수
- ANOVA
- 신라
- repeated measures ANOVA
- Histogram
- 선형회귀분석
- 후한서
- 낙랑군
- post hoc test
- R
- 한서지리지
- Today
- Total
獨斷論
통계 R 사용설명서 17 - 나만의 함수 만들기 본문
R에서 자신만의 사용자정의 함수를 만들어 사용할수 있다.
예를들어 함수의 첫번째와 두번째 인자(argument?)에 덧셈이나 뺄셈을 할 숫자를 넣고 세번째 인자가 1이면 덧셈을 실행하고 2이면 뺄셈을 실행하는 함수를 만들고자한다고 하자.
쉽게 말해
mysum(x, y, z)라는 함수를 만들어서
- z가 1이면 x+y를 실행해서 그 값을 돌려주고
- z가 2이면 x-y를 실행해서 그 값을 돌려주는 함수를 작성한다는 것이다.
R에서 함수의 형식
R에서 사용되는 함수의 형식은 아래와 같다.
my_function_name <- function(arg1, arg2, ...) {
statement1
statement2
...
return(object)
}
여기서 object는 스칼라변수든지 벡터변수든지 리스트뱐스는지 뭐든 될수가 있다.
합과 차를 구하는 위 예제에서는 단순한 스칼라변수가 될 것이다.
합과 차를 구하는 나만의 함수 작성
위 함수의 형식에 따라 나만의 함수를 작성해보자.
my_function_name은 자신이 기억하기 쉬운 함수이름으로 짓자.
합과 차를 구하는거니깐 그냥 my_sum_diff라고 하겠다. 더 좋은 것이 있다면 자신의 생각대로 하면 된다.
argument 즉 function( )있는 arg1, arg2 등은 여기서는 3개가 필요하다. 앞서 설명했듯이 이는 x와 y, 즉 합과 차를 구할 숫자변수와 합을구할지 차를 구할지 알려줄 z..
statements에는 if-else가 필요할 것이다. 세번째 argument가 1인지 2인지 그 다른 무엇인지에 따라 합을 구하거나 차를 구하거나 해야할 것이다.
맨 마지막 return( )에서는 우리가 구한 합 또는 차를 돌려주는 기능을 한다.
R Editor를 열어서 아래와 같이 작성하고
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
my_sum_diff <- function(x, y, index) { |
자신이 즐겨쓰는 디렉토리에 my_sum_diff.R이라고 저장하자. 보통 함수명과 파일명을 같이하면 기억하기도 편하고 좋다.
본 예제에서는 c:\temp에 저장하였다.
위 스크립트에서
1째 줄에 함수명이 my_sum_diff이고 인자 x와 y는 합이나 차를 구할 변수들이고 index는 합을 구하여야할지 차를 구하여야할지 알려주는 변수인데 1이면 합을 구하고 2이면 차를 구한다.
3~5번째 줄에서 if문을 이용하여 1이면 합을 구하여 그 값을 z에 넣도록 하였다.
6~9번째 줄에서 2이면 차를 구하여 그 값을 z에 넣도록 하였다.
9~12번째 줄에서 1도 아니고 2도 아니면 1과 2를 넣으라고 메세지를 보냈다. z에는 그냥 NA를 입력하였다.
14번재 줄에서 합과 차를 구한 z를 돌려보냈다. 만약 이 return이 없다면 c <- my_sum_stiff(1,2,1)를 하더라도 c에 값이 들어가지 않는다.
나만의 함수 실행
실행하는 방법은 약간 구닥다리다.
R console로 돌아가서 현재의 작업디렉토리를 위 my_sum_diff.R을 저장한 디렉토리로 간다.
1 2 3 4 5 6 7 |
> getwd() |
1번째 줄에서 현재 작업디렉토리가 어디인지 알려준다.
3번째 줄에서 작업디렉토리를 바꿨다.
6번재 줄에서 바꾼 작업디렉토리 c;\temp의 파일 목록을 보았다.
중요한건 윈도우에서라도 디렉토리는 리눅스처럼 슬레시(/)를 사용하여야 한다는거..
작업디렉토리가 사용자함수가 저장된 디렉토리로 바뀌었으면 아래처럼 실행한다.
1 |
> source("my_sum_diff.R") |
이렇게 하면 작성됐던 my_sum_diff.R이 모두 실행되게 된다.
작성한 함수를 사용하면
1 2 3 4 5 6 7 8 9 10 11 12 |
> a <- 10 |
사용방법은 그렇게 어렵지 않다.
리스트를 돌려주는 자신만의 함수
스칼라뿐만 아니라 모든 변수형태를 돌려줄수 있다.
여기서는 리스트를 돌려주는 함수를 만들어보자.
1 2 3 4 5 6 7 8 |
mystats <- function(x) {
return(result) |
함수의 이름은 mystats이고 평균을 구하여 center라 이름하여 값을 넣고 표준편차를 spread라 이름하여 값을 넣고 이 두개의 변수를 result라는 리스트변수로 작성하여 돌려주었다.
역시 위 스크립트를 mystats.R이라는 이름으로 저장하자.
1 2 3 4 5 6 7 8 9 10 11 12 |
> dir() |
source()명령을 실행할때 스크립트가 어떻게 생겼는지 보기를 원한다면 echo=TRUE 옵션을 넣으면 된다.
1 2 3 4 5 6 7 8 9 10 |
> a <- runif(10) |
b.list라면 변수에 평균이 b.list$center에 들어가고 표준편차가 b.list$spread에 들어갔다.