본문 바로가기
my_lesson/_R_컴퓨팅

R_컴퓨팅 - 함수 만들기

by boolean 2019. 2. 15.
728x90

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이라는 함수를 편집하는 팝업창이 열림


댓글