打印时等级舍入函数给我 'Logical(0)' - R

Grade rounding function giving me 'Logical(0)' when printing - R

我正在尝试使用 for 和 if 循环将随机成绩(向量)四舍五入到最接近的成绩(类别)。这个想法是该函数获取成绩并将它们放入一个类别中。该类别包含四舍五入的成绩并具有变量 'gradesRounded'。 gradesRounded 将被 return 编辑和打印,这将 logical(0) 作为输出。我非常希望输出包含四舍五入等级的向量。我该如何解决? (input/output 应该是向量和函数名称 + return(gradesRounded 必须包括因为它与赋值相关)输出应该是 -3, 7, 4, 12, -3

roundGrade <- function(grades) {

grades <- c(-3, 7, 3, 11, -2)

gradesRounded <- category

for (i in grades){

if (grades >= -3 & grades <= -2) {category=("-3")}

else if (grades >= -2 & grades <= 00) {category=("00")}

else if (grades >= 1 & grades <= 02) {category=("02")}

else if (grades >= 3 & grades <= 4) {category=("4")}

else if (grades >= 6 & grades <= 7) {category=("7")}

else if (grades >= 8 & grades <= 10) {category=("10")}

else if (grades >= 11 & grades <= 12) {category=("12")}

return(gradesRounded)

}
}

您可能正在尝试这样做:

roundGrade <- function(grades) {
  
  category <- numeric(length(grades))
  for (i in seq_along(grades)) {
    if (grades[i] >= -3 & grades[i] <= -2) {category[i]= -3}
    else if (grades[i] >= -2 & grades[i] <= 0) {category[i]= 0}
    else if (grades[i] >= 1 & grades[i] <= 2) {category[i]= 2}
    else if (grades[i] >= 3 & grades[i] <= 4) {category[i]= 4}
    else if (grades[i] >= 6 & grades[i] <= 7) {category[i]= 7}
    else if (grades[i] >= 8 & grades[i] <= 10) {category[i]= 10}
    else if (grades[i] >= 11 & grades[i] <= 12) {category[i]= 12}
  }
  return(category)
}

grades <- c(-3, 7, 3, 11, -2)
result <- roundGrade(grades)
result
#[1] -3  7  4 12 -3

另请参阅 ?cut?findInterval,这对此类情况很有帮助。