Menu
CoddyTech

向量排序

本课属于 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
challenge icon

挑战

简单

完成 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")
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: R 在线编译器