Używanie seq_along()
Część sekcji Podstawy ścieżki R w Coddy. Lekcja 64 z 78.
Czasami potrzebujesz zarówno wartości elementu, jak i jego pozycji w wektorze. Iterowanie bezpośrednio po elementach jest przejrzyste, ale nie zapewnia dostępu do indeksu. Funkcja seq_along() rozwiązuje ten problem, generując sekwencję indeksów dla dowolnego wektora.
Funkcja seq_along() zwraca sekwencję od 1 do długości wektora:
fruits <- c("apple", "banana", "cherry")
print(seq_along(fruits))Wynik:
[1] 1 2 3Iterując po tych indeksach, możesz uzyskać dostęp zarówno do pozycji, jak i wartości:
fruits <- c("apple", "banana", "cherry")
for (i in seq_along(fruits)) {
cat(i, ":", fruits[i], "\n")
}Wynik:
1 : apple
2 : banana
3 : cherryTo podejście jest szczególnie przydatne, gdy trzeba modyfikować elementy na określonych pozycjach lub porównywać elementy z ich sąsiadami. Użycie seq_along() jest bezpieczniejsze niż 1:length(vec), ponieważ poprawnie obsługuje puste wektory, zwracając pustą sekwencję zamiast 1:0.
Wyzwanie
ŁatwyOtrzymasz jeden wiersz danych wejściowych zawierający liczby oddzielone przecinkami (np. 10,20,30,40,50).
Użyj seq_along(), aby iterować po wektorze z indeksami:
- Utwórz wektor z danych wejściowych zawierających liczby oddzielone przecinkami
- Przejdź przez wektor za pomocą
seq_along(), aby uzyskać zarówno indeks, jak i wartość - Dla każdego elementu wypisz indeks, wartość oraz sumę narastającą do tego miejsca (sumę wszystkich elementów od pozycji 1 do bieżącej pozycji)
Użyj cat() w formacie: Position X: VALUE (Running total: TOTAL), a następnie znaku nowej linii.
Na przykład, jeśli dane wejściowe to:
5,10,15,20Wynik powinien być następujący:
Position 1: 5 (Running total: 5)
Position 2: 10 (Running total: 15)
Position 3: 15 (Running total: 30)
Position 4: 20 (Running total: 50)Wyjaśnienie: Na pozycji 1 wartość wynosi 5, a suma narastająca wynosi 5. Na pozycji 2 wartość wynosi 10, a suma narastająca wynosi 5+10=15. Na pozycji 3 wartość wynosi 15, a suma narastająca wynosi 5+10+15=30 i tak dalej.
Podpowiedź: Użyj sum(vector[1:i]), aby obliczyć sumę narastającą do pozycji i.
Spróbuj swoich sił
# Odczytaj dane wejściowe
con <- file("stdin", "r")
input_line <- suppressWarnings(readLines(con, n = 1))
close(con)
# Przekształć ciąg znaków rozdzielony przecinkami na wektor liczbowy
numbers <- as.numeric(strsplit(input_line, ",")[[1]])
# TODO: Napisz swój kod poniżej
# Użyj seq_along(), aby przejść przez wektor
# Dla każdej pozycji wypisz indeks, wartość i sumę narastającą
# Użyj cat() z formatem: Position X: VALUE (Running total: TOTAL)\nTa 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