我有两个向量
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 来解决这个问题。但是,我正在寻找此解决方案的矢量化版本。有没有更简单的方法来做到这一点?