16.7 잘못된 인수 처리
다시 사용할 함수, 특히 함수 작성자가 아닌 다른 사람이 사용할 수 있는 함수의 경우 함수 내 인수의 유효성을 확인하는 것이 좋습니다. 이를 수행하는 한 가지 방법은stop()
함수를 사용하는 것입니다. 다음은 if()
문을 사용하여 각 인수의 클래스가 숫자인지 확인합니다. 하나 이상의 인수가 숫자가 아니면 stop()
함수가 작동하여 사용자에게 의미 메시지를 제공할 것입니다.
# 미래 가치 벡터 : FV, 할인율 : r, 기간 : n을 인수로 현재 가치를 반환하는 PV 함수를 정의합니다.
<- function(FV, r, n) {
PV if(!is.numeric(FV) | !is.numeric(r) | !is.numeric(n)){
stop('This function only works for numeric inputs!\n',
'You have provided objects of the following classes:\n',
'FV: ', class(FV), '\n',
'r: ', class(r), '\n',
'n: ', class(n))
}
<- FV/(1+r)^n
PV round(PV, 2)
}
# PV() 함수를 이용하여 현재 가치를 구합니다.
PV("1000", 0.08, "5")
## Error in PV("1000", 0.08, "5"): This function only works for numeric inputs!
## You have provided objects of the following classes:
## FV: character
## r: numeric
## n: character
또 다른 문제는 누락되거나 NA
값을 다루는 것입니다. 잠재적 미래 가치 벡터에 PV()
함수를 수행하고 싶다고 가정해 보겠습니다. 이 함수는 FV
(future value, 미래 가치) 입력 벡터에서 누락된 값 대신 NA
를 출력합니다. 누락된 값을 제거하려면 na.rm = TRUE
인 경우 누락 된 값을 제거하기 위해 if
문과 함께 함수 인수에 na.rm
인수를 통합 할 수 있습니다.
# NA를 포함하고 있는 미래 가치 입력 벡터입니다.
<- c(800, 900, NA, 1100, NA)
fv
# PV 함수를 호출합니다.
PV(fv, .08, 5)
## [1] 544.47 612.52 NA 748.64 NA
# PV 함수를 정의합니다.
<- function(FV, r, n, na.rm = FALSE) {
PV if(!is.numeric(FV) | !is.numeric(r) | !is.numeric(n)){
stop('This function only works for numeric inputs!\n',
'You have provided objects of the following classes:\n',
'FV: ', class(FV), '\n',
'r: ', class(r), '\n',
'n: ', class(n))
}
if(na.rm == TRUE) { # na.rm 인수를 처리합니다.
<- FV[!is.na(FV)]
FV
}
<- FV/(1+r)^n
PV round(PV, 2)
}
PV(fv, 0.08, 5, na.rm = TRUE)
## [1] 544.47 612.52 748.64