R_컴퓨팅 - 함수 만들기
R분석을 하다 보면 데이터 전처리 라든지 그래프 그리기, 혹은 모형 개발/ update 등을 하는데 있어 반복 작업을 하는 경우가 있습니다.
이때 대상 데이터셋이라든지 변수, 혹은 조건 등을 조금씩 바꿔가면서 반복 작업을 (반)자동화 하고 싶을 때 유용하게 사용할 수 있는 것이 사용자 정의 함수 (User Defined Function) 입니다.
만약 사용자 정의 함수를 사용하지 않는다면 특정 부분만 바뀌고 나머지는 동일한 프로그램이 매우 길고 복잡하고 산만하게 늘어세울 수 밖에 없게 됩니다. 반면 사용자 정의 함수를 사용하면 사용자 정의 함수 정의 후에 바뀌는 부분만 깔끔하게 사용자 정의 함수의 입력란에 바꿔서 한줄 입력하고 실행하면 끝입니다. 반복작업이 있다 싶으면 손과 발의 노가다를 줄이고 작업/분석 시간을 줄이는 방법, 프로그래밍을 간결하고 깔끔하게 짜는 방법으로 사용자 정의 함수를 사용할 여지가 있는지 살펴볼 필요가 있겠습니다.
함수의 구조
입력, 연산, 출력
변수의 구조
function_name <- function( arg1, arg2, ... ) {
expression
return( object)
}
1) 평균(mean), 표준편차(standard deviation), min, max 계산 사용자 정의 함수
(User defined function of statistics for continuous variable)
> # 평균, 표준편차, min, max 계산
>
> stat_function <- function(x) {
+ x_mean = mean(x)
+ x_sd = sd(x)
+ x_min = min(x)
+ x_max = max(x)
+ x_summary = list(x_mean=x_mean, x_sd=x_sd, x_min=x_min, x_max=x_max)
+ return(x_summary)
+ }
>
> stat_function(x = Cars93$MPG.highway)
$x_mean
[1] 29.08602
$x_sd
[1] 5.331726
$x_min
[1] 20
$x_max
[1] 50
> # summary() 함수와 비교
> summary(Cars93$MPG.highway)
Min. 1st Qu. Median Mean 3rd Qu. Max.
20.00 26.00 28.00 29.09 31.00 50.00
2) 산점도 그래프 그리기 사용자 정의 함수 (User defined function of scatter plot)
> # 산점도 그래프 그리기 함수 (scatter plot)
> plot_function <- function(dataset, x, y, title) {
+ attach(dataset)
+ plot(y ~ x, dataset, type="p",
+ main = title)
+ detach(dataset)
> plot_function(dataset=Cars93, x=MPG.highway, y=Weight, title="Scatter Plot of MPG.highway & Weight")
> plot_function(dataset=Cars93, x=Price, y=Horsepower, title="Scatter Plot of Price & Horsepower")
위의 기초통계량은 summary() 함수를 사용하면 되고 산포도도 plot() 함수를 쓰는 것과 별 차이가 없어보여서 사용자 정의 함수를 쓰는 것이 뭐가 매력적인지 잘 이해가 안갈 수도 있을 것 같습니다. 하지만 만약 기초 통계량을 뽑아서 txt 파일로 외부로 내보내기를 하고, x 변수를 바꿔가면서 loop를 돌려서 반복적으로 기초 통계량을 뽑고 이것을 계속 txt 파일로 외부로 내보내기를 하되, 앞서 내보냈던 파일에 계속 append 를 해가면서 결과값을 저장한다고 할때는 위의 사용자 정의 함수를 사용하는 것이 정답입니다.
그래프도 변수명의 일부분을 바꿔가면서 그래프를 그리고 싶을 때는 paste() 함수를 적절히 사용하면 사용자 정의 함수를 더욱 강력하게 사용할 수 있게 됩니다. 응용하기 나름이고, 사용 가능한 경우가 무궁무진한데요, 이번 포스팅에서는 사용자 정의 함수의 기본 뼈대에 대해서만 간략히 살펴 보았습니다.
참고로, 사용자 정의 함수를 정의할 때 아래처럼 function(x, y, ...) 의 파란색 생략부호 점을 입력하면 나중에 사용자 정의 함수에서 정의하지 않았던 부가적인 옵션들을 추가로 덧붙여서 사용할 수 있어서 유연성이 높아지는 효과가 있습니다.
function_name <- function(x, y, ...) {
expresstion
return(object)
}
fix(function_name) # function_name이라는 함수를 편집하는 팝업창이 열림
'my_lesson > _R_컴퓨팅' 카테고리의 다른 글
R_컴퓨팅 - 그래프 그리기 (0) | 2019.02.19 |
---|---|
R_컴퓨팅 - 기초통계량 출력 (0) | 2019.02.18 |
R_컴퓨팅 - 프로그래밍 기본 구조[2] - 제어문 , 반복문, 분기문 (0) | 2019.02.14 |
R_컴퓨팅 - 프로그래밍 구조[1] 연선자 (0) | 2019.02.13 |
R_컴퓨팅 - 데이터의 구조[3] 리스트 데이터프레임 (0) | 2019.02.12 |
댓글