Iterowanie po znakach (strsplit
Część sekcji Podstawy ścieżki R w Coddy. Lekcja 65 z 78.
A co, jeśli musisz przetwarzać każdy znak w ciągu znaków osobno? W przeciwieństwie do wektorów nie możesz bezpośrednio iterować po znakach ciągu znaków w R. Funkcja strsplit() rozwiązuje ten problem, dzieląc ciąg znaków na wektor znaków.
Funkcja strsplit() przyjmuje dwa argumenty: ciąg znaków do podzielenia oraz separator. Aby podzielić ciąg na pojedyncze znaki, użyj pustego ciągu "" jako separatora:
word <- "hello"
chars <- strsplit(word, "")[[1]]
print(chars)Wynik:
[1] "h" "e" "l" "l" "o"Zwróć uwagę na [[1]] na końcu. Dzieje się tak, ponieważ strsplit() zwraca listę, a my musimy wyodrębnić pierwszy element, aby uzyskać wektor znaków. Gdy masz już znaki w postaci wektora, możesz iterować po nich, korzystając z technik, których już się nauczyłeś:
word <- "R"
chars <- strsplit(word, "")[[1]]
for (char in chars) {
print(char)
}Wynik:
[1] "R"Ta technika jest niezbędna w zadaniach takich jak zliczanie określonych znaków, odwracanie ciągów znaków lub sprawdzanie poprawności danych wejściowych znak po znaku.
Wyzwanie
ŁatwyOtrzymasz jeden wiersz danych wejściowych zawierający słowo (np. programming).
Użyj strsplit(), aby podzielić ciąg znaków na pojedyncze znaki:
- Podziel słowo wejściowe na wektor znaków
- Przejdź pętlą przez każdy znak w wektorze
- Policz, ile razy litera
"a"występuje w słowie (rozróżniając wielkość liter) - Wydrukuj każdy znak w osobnym wierszu za pomocą
print() - Po pętli wydrukuj liczbę wystąpień za pomocą
cat()w formacie:Count of 'a': X, a następnie znak nowego wiersza
Na przykład, jeśli dane wejściowe to:
bananaWynik powinien wyglądać tak:
[1] "b"
[1] "a"
[1] "n"
[1] "a"
[1] "n"
[1] "a"
Count of 'a': 3Wyjaśnienie: Słowo "banana" zostaje podzielone na znaki c("b", "a", "n", "a", "n", "a"). Każdy znak jest drukowany, a litera "a" występuje 3 razy.
Spróbuj swoich sił
# Odczytaj dane wejściowe
con <- file("stdin", "r")
word <- suppressWarnings(readLines(con, n = 1))
# Zainicjalizuj licznik litery 'a'
count_a <- 0
# TODO: Napisz swój kod poniżej
# 1. Użyj strsplit(), aby podzielić słowo na pojedyncze znaki
# 2. Przejdź w pętli przez każdy znak
# 3. Wypisz każdy znak za pomocą print()
# 4. Policz, ile razy występuje 'a'
# Wyświetl liczbę wystąpień 'a'
cat("Count of 'a': ", count_a, "\n", sep = "")Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy
4Operatory, część 2
Operatory logiczne (AND, OR)Operatory logiczne, część 2 (NOT)Powtórka — prosta logikaLogika wektoryzowana, część 1Logika wektoryzowana, część 27Kalkulator podziału rachunku
Wiadomość powitalnaPobieranie danych od użytkownika10FizzBuzz z niespodzianką
Omówienie gryFunkcja FizzBuzz2Zmienne i typy danych
Liczbowy typ danychCałkowity typ danychZnakowy typ danychLogiczny typ danychSprawdzanie typów danychKonwencje nazewnictwaBrakujące wartości: NAPodsumowanie – tworzenie zmiennych8Pętle
Pętla forPętla whilePrzerwijNastępna iteracja (continue)Powtórka — silniaGenerowanie sekwencji (seq, :)Pętle zagnieżdżonePowtórka — dynamiczne wprowadzanie danych3Operatory, część 1
Operatory arytmetyczneDzielenie całkowite i moduloOperatory przypisaniaPowtórka — prosta matematykaOperatory porównania6Podstawowe wejście/wyjście
Wyświetlanie danychCat jako wyjścieWyjście z użyciem zmiennychOdczyt danych wejściowych za pomocą readline()Podstawy konwersji typówPowtórka — kalkulator wiekuPowtórka — prawda czy fałsz9Funkcje
Deklarowanie funkcjiArgumenty funkcjiWartości zwracanePowtórzenie — funkcja SigmaPowtórzenie — funkcja walidującaDomyślne wartości parametrów12Iterowanie po sekwencjach
Iterowanie po elementach wektoraUżywanie seq_along()Iterowanie po znakach (strsplitFunkcje manipulacji ciągami znakówPoćwicz samodzielnie: Kompilator R online