如何在一行上循环打印输出?

时间:2019-02-19 23:09:43

标签: r loops

我必须在r中创建一个等级计算器,该计算器可以将数字等级转换为字母等级。这是我想出的代码:

numGrades<-(c(66,02,99,59,82))
for(i in 1:length(numGrades)) {
if (numGrades[i]>=90){
print("A")
} else if (numGrades[i]>=80){
print("B")
}  else if (numGrades[i]>=70){
print("C")
}  else if (numGrades[i]>=60){
print("D")
} else {
print("F")}
}

我找不到一种方法来集成cat或print(c())函数,以使其在一行上打印而不是:

 [1] "D"`    
 [1] "F"`
 [1] "A"
 [1] "F"
 [1] "B"

如果有人有任何想法,将不胜感激!

4 个答案:

答案 0 :(得分:1)

我将简单地使用粘贴将“已分级”列表的所有元素结合在一起。希望这可以帮助。

const child = child_process.fork('child.js');
child.on('message', (data) => { });

这给出了:

numGrades = graded = (c(66,02,99,59,82))

for(i in 1:length(numGrades)) {
if (numGrades[i]>=90){
graded[i] = "A"
} else if (numGrades[i]>=80){
graded[i] = "B"
}  else if (numGrades[i]>=70){
graded[i] = "C"
}  else if (numGrades[i]>=60){
graded[i] = "E"
} else {
graded[i] = "F"}
}

print(paste(graded))

答案 1 :(得分:1)

为什么cat不起作用?

numGrades<-(c(66,02,99,59,82))
for(i in 1:length(numGrades)) {
  if (numGrades[i]>=90){
    cat("A ")
  } else if (numGrades[i]>=80){
    cat("B ")
  }  else if (numGrades[i]>=70){
    cat("C ")
  }  else if (numGrades[i]>=60){
    cat("D ")
  } else {
    cat("F ")}
}

答案 2 :(得分:0)

对于R中的许多任务,最好使用矢量化函数而不是循环来完成。这是您想做的两种方式,一种使用底数R,另一种使用window。请注意,dplyr::case_when返回一个因子,但是您始终可以使用cut

as.character

答案 3 :(得分:0)

仅作记录,无需使用for循环,您可以使用嵌套的ifelse

> graded2 <- ifelse(numGrades>=90, "A",
                    ifelse(numGrades >= 80 & numGrades < 90, "B",
                           ifelse(numGrades >= 70 & numGrades < 80, "C",
                                  ifelse(numGrades >= 60 & numGrades < 70, "E", "F"))))
> graded2
[1] "E" "F" "A" "F" "B"