Menu
Coddy logo textTech

Iterowanie po nazwach

Część sekcji Logika i przepływ sterowania ścieżki R w Coddy. Lekcja 10 z 64.

Pętla for przechodząca po names(x) odwiedza każdy klucz, a x[[key]] zwraca wartość dla tego klucza:

scores <- c(ada = 91, bo = 78, cy = 85)
for (name in names(scores)) {
  cat(name, "scored", scores[[name]], "\n")
}

Wynik:

ada scored 91 
bo scored 78 
cy scored 85 

Wpisy zachowują kolejność, w jakiej zostały dodane. Użyj pętli po sort(names(x)), aby uzyskać kolejność alfabetyczną:

scores <- c(cy = 85, ada = 91, bo = 78)
for (name in sort(names(scores))) {
  cat(name, scores[[name]], "\n")
}

Wynik:

ada 91 
bo 78 
cy 85 

Przechodzenie po danych wejściowych w pętli i aktualizowanie tabeli wyszukiwania pozwala policzyć, jak często pojawia się każda wartość. Za pierwszym razem, gdy słowo zostanie napotkane, przypisywana jest mu wartość 1, a potem zwiększa się ona o 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))

Wynik:

[1] 3
[1] "red"   "blue"  "green"

Aby utworzyć wiersze wyników, zbierz je w wektorze wewnątrz pętli, a na końcu zwróć je lub wyświetl:

scores <- c(ada = 91, bo = 78)
lines <- c()
for (name in names(scores)) {
  lines <- c(lines, paste0(name, ": ", scores[[name]]))
}
cat(lines, sep = "\n")

Wynik:

ada: 91
bo: 78
challenge icon

Wyzwanie

Łatwy

Uzupełnij word_counts(words). Zwróć jeden wiersz dla każdego unikalnego słowa, w kolejności alfabetycznej, w formacie word: count.

Dostarczony kod odczytuje słowa jako jeden wiersz rozdzielony spacjami i wypisuje każdy zwrócony wiersz.

Spróbuj swoich sił

word_counts <- function(words) {
  # Wpisz tutaj swój kod
  character(0)
}

# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
input <- suppressWarnings(readLines(file("stdin")))
cat(word_counts(strsplit(input[1], " ")[[1]]), sep = "\n")
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator R online