Lặp qua các tên
Thuộc phần Logic và luồng điều khiển trong hành trình R của Coddy. Bài học 10 trên 64.
Vòng lặp for lặp qua names(x) để truy cập từng khóa, còn x[[key]] trả về giá trị tương ứng với khóa đó:
scores <- c(ada = 91, bo = 78, cy = 85)
for (name in names(scores)) {
cat(name, "scored", scores[[name]], "\n")
}Đầu ra:
ada scored 91
bo scored 78
cy scored 85 Các phần tử giữ nguyên thứ tự được thêm vào. Duyệt qua sort(names(x)) để sắp xếp theo thứ tự bảng chữ cái:
scores <- c(cy = 85, ada = 91, bo = 78)
for (name in sort(names(scores))) {
cat(name, scores[[name]], "\n")
}Đầu ra:
ada 91
bo 78
cy 85 Lặp qua đầu vào và cập nhật bảng tra cứu giúp đếm số lần mỗi giá trị xuất hiện. Lần đầu tiên một từ xuất hiện, số đếm của từ đó là 1; sau đó, số đếm tăng thêm 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))Đầu ra:
[1] 3
[1] "red" "blue" "green"Để tạo các dòng đầu ra, hãy gom chúng vào một véc-tơ bên trong vòng lặp, rồi trả về hoặc in ra ở cuối:
scores <- c(ada = 91, bo = 78)
lines <- c()
for (name in names(scores)) {
lines <- c(lines, paste0(name, ": ", scores[[name]]))
}
cat(lines, sep = "\n")Đầu ra:
ada: 91
bo: 78Thử thách
DễHoàn thiện word_counts(words). Trả về mỗi từ khác nhau trên một dòng, theo thứ tự chữ cái, với định dạng word: count.
Đoạn code được cung cấp đọc các từ trên một dòng, cách nhau bằng dấu cách, rồi in ra từng dòng được trả về.
Tự làm thử
word_counts <- function(words) {
# Viết code của bạn ở đây
character(0)
}
# Đoạn code đầu vào/đầu ra được cung cấp sẵn: giữ nguyên
input <- suppressWarnings(readLines(file("stdin")))
cat(word_counts(strsplit(input[1], " ")[[1]]), sep = "\n")
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Logic và luồng điều khiển
1Chuỗi chuyên sâu
Chuỗi con với substr()Định dạng với sprintf()Tách và nối chuỗiTìm kiếm trong chuỗiThay thế văn bảnÔn tập: Tạo tên người dùng10Luồng điều khiển nâng cao
Hàm switch()ifelse() dạng vector hóarepeat và breakHàm đệ quyÔn tập: phân loại điểm2Tra cứu khóa-giá trị
Tra cứu vector theo tênKiểm tra khóaThêm và xóa khóaLặp qua các tênÔn tập: Bàn giao dịch cổ phiếuTự luyện tập: Trình biên dịch R online