Chapter 13 함수
반복되는 작업을 매번 복사-붙여넣기 하는 것은 매우 비효율적이며, 함수를 작성하여 사용할 경우 매우 효율적인 작업이 가능합니다.
13.1 함수의 요소
R에서 함수는 크게 3가지 요소로 구성됩니다.
body()
: 함수 내부의 코드formals()
: 인자(argument) 내역environment()
: 함수의 변수에 대한 위치
예를 들어 금융 자산의 현재 가치는 다음과 같이 계산됩니다.
\[PV = FV / (1+r)^n\]
- PV: 현재 가치
- FV: 미래 가치
- r: 할인률
- n: 기간
이를 함수로 나타내면 다음과 같습니다.
= function(FV, r, n) {
PV = FV / (1+r)^n
PV round(PV, 2)
}
3가지 요소를 확인해보도록 하겠습니다.
body(PV)
## {
## PV = FV/(1 + r)^n
## round(PV, 2)
## }
formals(PV)
## $FV
##
##
## $r
##
##
## $n
environment(PV)
## <environment: R_GlobalEnv>
13.2 인자
PV()
함수는 여러 방법으로 실행할 수 있습니다.
PV(FV = 1000, r = 0.08, n = 5)
## [1] 680.6
모든 인자 리스트와 이에 대응되는 값을 입력합니다.
PV(1000, 0.08, 5)
## [1] 680.6
인자 리스트를 생략하면, 순서대로 값이 입력됩니다.
PV(r = 0.08, FV = 1000, n = 5)
## [1] 680.6
인자 내역을 순서대로 입력하지 않아도 됩니다.
PV(1000, 0.08)
## Error in PV(1000, 0.08): 기본값이 없는 인수 "n"가 누락되어 있습니다
PV()
함수에 필요한 인자는 3개인 반면, 2개만 입력하였으므로 에러가 발생합니다.
= function(FV = 1000, r = .08, n = 5) {
PV = FV / (1 + r)^n
PV round(PV, 2)
}
PV(1000, 0.08)
## [1] 680.6
만일 함수의 인자에 디폴트 값이 입력되어 있다면, 함수 실행시 이를 생략하여도 디폴트 값이 입력됩니다. 위 예제에서 n값이 디폴트 값인 5가 적용되었습니다.
13.3 다중 결과값 출력
동일한 함수를 여러값에 적용하기 위해서는 함수 내부에 c()
함수를 적용해야 합니다.
= function(x, y) {
bad 2 * x + y # 1
+ 2 * y # 2
x 2 * x + 2 * y # 3
/ y # 4
x
}
bad(1, 2)
## [1] 0.5
1, 2, 3, 4번 모든 연산에 대한 출력을 원하지만, 맨 마지막 연산값 만이 출력됩니다.
= function(x, y) {
good = 2 * x + y
output1 = x + 2 * y
output2 = 2 * x + 2 * y
output3 = x / y
output4 c(output1, output2, output3, output4)
}
good(1, 2)
## [1] 4.0 5.0 6.0 0.5
모든 결과를 output*에 저장한 후 c()
함수를 통해 이를 묶어주면, 모든 연산값이 출력됩니다.