私は2つのベクトルを持っています
vThresholds = as.vector(c(0.12, 0.34, 0.56, 0.85))
vCandidates = as.vector(rnorm(100))
vThresholds のどこにあるかに基づいて、候補者に成績を割り当てたいと考えています。私は次のように関数を書きました
fGrades = function (x, y) {
if(y <= x[1]){
grade = "A"
} else if(y > x[1] & y <= x[2]){
grade = "B"
} else if(y > x[2] & y <= x[3]){
grade = "C"
} else if(y > x[3] & y <= x[4]){
grade = "D"
}else {grade = "E"}
grade
}
しかし、私が使用するとき
mapply(fGrades, vThresholds, vCandidates)
エラーが発生する
Error in if (y <= x[1]) { : missing value where TRUE/FALSE needed
このエラーをたどると、mapply が x を NA に変換することがわかりました。
vCandidates をループすることで、この問題を回避できます。ただし、このソリューションのベクトル化されたバージョンを探しています。これを行う簡単な方法はありますか?