从for循环中打印或返回字符串

xmakbtuz  于 2023-06-03  发布在  其他
关注(0)|答案(5)|浏览(220)

这里有一个问题--构建一个条件来检查向量标记(作为参数传递)中的所有数字是否都大于90。如果是,则将字符串“Best Class”分配给变量ans,否则分配“Needs Improvement”。
这是我写的代码-

classmark<-function(marks){
 ans<- marks
 for(i in 1:length(marks)){
 if(marks[i] > 90){
         cat("Best Class")
     }
     else{
         cat("Needs Improvement")
     }
}    
return(ans)
}
print(classmark(c(100,95,94,56)))
print(classmark(c(100,95,94,96)))

实际产量-

Best Class Best Class Best Class Needs Improvement
Best Class Best Class Best Class Best Class

我得到的输出-

Best Class Best Class Best Class Needs Improvement[1] 100 95 94 56
Best Class Best Class Best Class Best Class[1] 100 95 94 96

建议在代码中需要修改的任何更改,以获得实际输出

ffscu2ro

ffscu2ro1#

由于您只想在循环中打印,因此从函数中删除return语句。

classmark<-function(marks){
  ans<- marks
  for(i in 1:length(marks)){
    if(marks[i] > 90){
      cat("Best Class\n")
    }
    else{
      cat("Needs Improvement\n")
    }
  }    
}

classmark(c(100,95,94,56))
#Best Class
#Best Class
#Best Class
#Needs Improvement

您也可以使用ifelse的矢量化版本,它不需要for循环。

classmark<-function(marks){
 ifelse(marks > 90, "Best Class", "Needs Improvement")
}

classmark(c(100,95,94,56))
#[1] "Best Class"   "Best Class"   "Best Class"    "Needs Improvement"
798qvoo8

798qvoo82#

由于条件是检查是否“所有”数字:

classmark <- function(marks) { 
  ans <- c() 
  for (i in 1:length(marks)) {
    if (marks[i] > 90) { 
      ans <- "Best Class"
    } else { 
      ans <- "Needs Improvement" 
    } 
  } 
  return(ans) 
}
tjrkku2a

tjrkku2a3#

检查一下这个是否有效。

filter <- marks > 90
x <- TRUE
for (y in filter){
    x <- x && y
}
if(x){
    ans <- "Best Class"
}else{
    ans <- "Needs Improvement"
}
fcy6dtqo

fcy6dtqo4#

这实际上是要求检查参数(标记)的所有值是否大于90,而不是单个值。

classmark<-function(marks){

  # Enter your code here. Read input from STDIN. Print output to STDOUT
  
  # if all values in marks are greater than 90, return "Best Class"
  if (all(marks > 90)){
    return ("Best Class")
  }
  else {
    return ("Needs Improvement")
  }  
}
print(classmark(c(100,95,94,56)))
print(classmark(c(100,95,94,96)))
avkwfej4

avkwfej45#

我认为这应该起作用:

for(i in 1:length(marks)){
    if(marks[i]>90){
        ans<- "Best Class"
    }
    else{
        ans<- "Needs Improvement"
    }
}

return(ans)

相关问题