Menu
Coddy logo textTech

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 3

Iterują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 : cherry

To 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.

challenge icon

Wyzwanie

Łatwy

Otrzymasz 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:

  1. Utwórz wektor z danych wejściowych zawierających liczby oddzielone przecinkami
  2. Przejdź przez wektor za pomocą seq_along(), aby uzyskać zarówno indeks, jak i wartość
  3. 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,20

Wynik 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)\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 Podstawy

Poćwicz samodzielnie: Kompilator R online