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

R 如何在一行上打印循环的输出?,r,loops,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 (numGr

我必须用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")}
}

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

我只需使用“粘贴”来连接“分级”列表中的所有元素。希望这有帮助

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))

这使得:

> print(paste(graded))
[1] "E" "F" "A" "F" "B"


为什么
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 ")}
}
numGrades=90){
猫(“A”)
}else如果(numGrades[i]>=80){
类别(“B”)
}else if(numGrades[i]>=70){
类别(“C”)
}else如果(numGrades[i]>=60){
猫(“D”)
}否则{
猫(“F”)}
}

对于R中的许多任务,最好使用向量化函数,而不是循环。这里有两种方法,一种是使用base R,另一种是
dplyr::case\u when
。请注意,
cut
返回一个因子,但始终可以将
用作.character

numGrades <- c(66,02,99,59,82)
letGrades <- cut(
  numGrades,
  breaks = c(-Inf, 6:9, Inf) * 10,
  labels = LETTERS[c(6, 4:1)],
  right = FALSE
)
letGrades

library(dplyr)
letGrades <- case_when(
  numGrades >= 90 ~ "A",
  numGrades >= 80 ~ "B",
  numGrades >= 70 ~ "C",
  numGrades >= 60 ~ "D",
  TRUE            ~ "F"
)
letGrades
numGrades=70~“C”,
numGrades>=60~“D”,
真~“F”
)
莱特格拉兹

仅用于记录,不需要使用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"
>等级2=90,“A”,
如果其他(numGrades>=80和numGrades<90,“B”,
ifelse(numGrades>=70和numGrades<80,“C”,
ifelse(numGrades>=60和numGrades<70,“E”、“F”))
>等级2
[1] “E”“F”“A”“F”“B”

谢谢,这确实有效,但我是个新手,所以我不希望输出没有空格,也不知道如何添加它们哈哈。我很感激你的回答,它帮助我更好地理解了猫是如何工作的。谢谢!这正是我想要的结果,非常感谢:)你的第一个问题做得好。正如您所知,当您接受下面的答案时,问题会以不同的纯色突出显示,表示问题已“解决”,因此无需将内容编辑到标题中。
> 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"