R 如何在一行上打印循环的输出?
我必须用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
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"