我想为R中的学生找到失败科目的最高等级。我已经写了这个功能,但它看起来更像是java代码而不是R,因为它使用循环遍历向量而不是使用特殊函数在R.的目的,请你建议一个替代解决方案
grades <- c(62, 100, 45, 40, 46, 55, 56, 70)
largestFail <- function(grades){
location <- -1
faildFound <- FALSE
for(i in 1:length(grades)){
if(grades[i] < 50){
if(!faildFound) location <- i
if(grades[i] > grades[location]) location <- i
faildFound <- TRUE
}
}
return (location)
}
print (grades) # 5
答案 0 :(得分:4)
这很好用:
max(grades[grades < 50])
您将grades
向量子集化为50以下的值,然后提取其最大值。
如果您需要详细了解,可以单独评估这些部件:
grades < 50
会为50 TRUE
的逻辑向量
grades[grades < 50]
然后是50以下所有值的向量max()
以找到最高失败等级如果你想在没有学生失败的情况下返回-1,那么这样的事情应该可以胜任:
grades <- c(60, 70, 80)
if(any(grades < 50)){
return(max(grades[grades < 50])
)
} else {
return(-1)
}
一个较短但不太清晰的解决方案,就是在你的等级向量上加上-1:
grades <- c(60, 70, 80)
grades <- c(grades, -1)
max(grades[grades < 50])
答案 1 :(得分:3)
另一种方法,使用which.max
,但在通话前将NA
之前的值替换为阈值:
which.max(replace(grades, grades>=50, NA))
#[1] 5