遍历名称
本课属于 Coddy R 学习旅程的“逻辑与流程”单元。第 10 课,共 64 课。
遍历 names(x) 的 for 循环会访问每个键,x[[key]] 会给出该键对应的值:
scores <- c(ada = 91, bo = 78, cy = 85)
for (name in names(scores)) {
cat(name, "scored", scores[[name]], "\n")
}输出:
ada scored 91
bo scored 78
cy scored 85 条目会按照添加顺序排列。要按字母顺序排列,请遍历 sort(names(x)):
scores <- c(cy = 85, ada = 91, bo = 78)
for (name in sort(names(scores))) {
cat(name, scores[[name]], "\n")
}输出:
ada 91
bo 78
cy 85 遍历输入并更新查找表,可以统计每个值出现的次数。一个单词第一次出现时,计数为 1,之后每出现一次就加 1:
words <- c("red", "blue", "red", "green", "red")
counts <- c()
for (w in words) {
if (w %in% names(counts)) {
counts[w] <- counts[w] + 1
} else {
counts[w] <- 1
}
}
print(counts[["red"]])
print(names(counts))输出:
[1] 3
[1] "red" "blue" "green"要构建输出行,请在循环中将它们收集到一个向量里,并在最后返回或打印:
scores <- c(ada = 91, bo = 78)
lines <- c()
for (name in names(scores)) {
lines <- c(lines, paste0(name, ": ", scores[[name]]))
}
cat(lines, sep = "\n")输出:
ada: 91
bo: 78挑战
简单完成 word_counts(words)。每个不同的单词返回一行,按字母顺序排列,格式为 word: count。
提供的代码会读取一行以空格分隔的单词,并打印返回的每一行。
亲手试试
word_counts <- function(words) {
# 在这里编写你的代码
character(0)
}
# 提供的输入/输出代码:保持原样
input <- suppressWarnings(readLines(file("stdin")))
cat(word_counts(strsplit(input[1], " ")[[1]]), sep = "\n")
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: R 在线编译器