더북(TheBook)

보다시피 grade2(59)를 제외한 나머지는 모두 결과가 잘못되었다. 조건 순서를 재조정하지 않고 이 함수를 올바르게 고치려면 순서에 영향을 받지 않도록 조건들을 다시 만들어야 한다.

> grade2 <- function(score) {
+     if (score >= 60 && score < 70) {
+         return("D")
+     } else if (score >= 70 && score < 80) {
+         return("C")
+     } else if (score >= 80 && score < 90) {
+         return("B")
+     } else if (score >= 90) {
+         return("A")
+     } else {
+         return("F")
+     }
+ }
> c(grade2(65), grade2(59), grade2(87), grade2(96))
[1] "D" "F" "B" "A"

그러다 보니 처음 버전보다 코드가 더 길어졌다. 따라서 분기 순서를 잘 따져 보고 분기별 독립성을 고려하는 것이 중요하다.

R에서는 이와 기능이 동일한 cut 함수를 제공한다. 더 자세한 사항은 ?cut으로 관련 문서를 참고하자.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.