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)
|
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)
}
많은 도움 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감 ~♡' 단추를 꾸욱 눌러주세요.^^
'R 분석과 프로그래밍 > R 프로그래밍' 카테고리의 다른 글
[R] 폴더 내 여러개 파일들을 Loop 돌려서 자동으로 불러오기 (154) | 2016.07.02 |
---|---|
R "target of assignment expands to non-language object" error : assign() (2) | 2015.09.22 |
ggplot2 저장 : ggsave(), console 내용 text 저장 : capture.output() (0) | 2015.09.17 |
R 조건 연산 프로그래밍 (conditional process programming) : if(), elseif() (19) | 2015.09.05 |
R 반복 연산 프로그래밍(Loop process programming) : for(), while() (17) | 2015.09.05 |