보다시피 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으로 관련 문서를 참고하자.