向量排序
本课属于 Coddy R 学习旅程的“逻辑与流程”单元。第 37 课,共 64 课。
sort(x) 按升序返回 x 的值,设置 decreasing = TRUE 则会将其反转。原向量不会改变:
scores <- c(72, 95, 60, 88)
print(sort(scores))
print(sort(scores, decreasing = TRUE))
print(scores)输出:
[1] 60 72 88 95
[1] 95 88 72 60
[1] 72 95 60 88文本按字母顺序排序。具体顺序取决于系统的语言设置:在 Coddy 上,和许多服务器一样,大写字母排在小写字母前面,所以 "Zed" 排在 "ada" 前面。如果不需要区分大小写,可以使用 tolower() 转换:
names <- c("cy", "Zed", "ada")
print(sort(names))
print(sort(tolower(names)))输出:
[1] "Zed" "ada" "cy"
[1] "ada" "cy" "zed"rev(x) 会反转当前顺序,但不会排序;head(x, n) 会保留前 n 个元素。两者与 sort() 一起使用,可以得到一个排名靠前的列表:
scores <- c(72, 95, 60, 88)
print(rev(scores))
print(head(sort(scores, decreasing = TRUE), 2))输出:
[1] 88 60 95 72
[1] 95 88排序后的命名向量会将每个名称与其值保存在一起,因此名称会按照值的顺序排列:
stock <- c(tea = 12, jam = 3, oil = 7)
low_first <- sort(stock)
print(names(low_first))
print(low_first[["jam"]])输出:
[1] "jam" "oil" "tea"
[1] 3挑战
简单完成 top_scores(scores, n)。按从高到低的顺序返回最高的 n 个分数,并用 , 连接。如果分数少于 n 个,则返回所有分数。
提供的代码会读取一行以逗号分隔的分数和 n,并打印返回的值。
亲手试试
top_scores <- function(scores, n) {
# 在这里编写你的代码
""
}
# 提供的输入和输出代码:保持原样
input <- suppressWarnings(readLines(file("stdin")))
cat(top_scores(as.numeric(strsplit(input[1], ",")[[1]]), as.numeric(input[2])), sep = "\n")
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: R 在线编译器