Menu
Coddy logo textTech

Dostęp do elementów listy

Część sekcji Podstawy ścieżki R w Coddy. Lekcja 72 z 78.

Listy używają innej składni dostępu do elementów niż wektory. Kluczowa różnica dotyczy pojedynczych nawiasów kwadratowych [ ] i podwójnych nawiasów kwadratowych [[ ]].

Podwójne nawiasy wyodrębniają właściwy element z listy:

my_list <- list(42, "hello", TRUE)
print(my_list[[1]])

Wynik:

[1] 42

Pojedyncze nawiasy zwracają podlistę zawierającą element, a nie sam element:

my_list <- list(42, "hello", TRUE)
print(my_list[1])

Wynik:

[[1]]
[1] 42

To rozróżnienie ma znaczenie, gdy chcesz pracować z rzeczywistą wartością. Jeśli element listy jest wektorem, podwójne nawiasy pozwalają uzyskać do niego bezpośredni dostęp, a następnie użyć indeksowania wektora:

my_list <- list(c(10, 20, 30), "text")
print(my_list[[1]][2])

Wynik:

[1] 20

Tutaj my_list[[1]] pobiera wektor, a [2] uzyskuje dostęp do jego drugiego elementu. Pamiętaj: używaj [[ ]], gdy potrzebujesz właściwej zawartości, a [ ], gdy chcesz uzyskać mniejszą listę.

challenge icon

Wyzwanie

Łatwy

Otrzymasz dwa wiersze danych wejściowych:

  1. Trzy wartości różnych typów oddzielone przecinkami (np. 100,hello,TRUE)
  2. Lista liczb oddzielonych przecinkami, reprezentująca wektor, który ma być przechowywany jako czwarty element (np. 5,10,15,20)

Wykonaj następujące operacje:

  1. Utwórz listę z czterema elementami: wartością liczbową, tekstem, wartością logiczną i wektorem liczb
  2. Użyj podwójnych nawiasów, aby wyodrębnić i wydrukować drugi element (wartość tekstową)
  3. Użyj pojedynczych nawiasów, aby wyodrębnić trzeci element i wydrukować wynik (zwróć uwagę na różnicę w formacie wyjściowym)
  4. Uzyskaj dostęp do wektora przechowywanego w czwartym elemencie za pomocą podwójnych nawiasów, a następnie wyodrębnij i wydrukuj jego trzecią wartość, używając indeksowania wektora
  5. Wydrukuj sumę wszystkich liczb w czwartym elemencie (uzyskaj dostęp do wektora za pomocą podwójnych nawiasów i użyj sum())

Na przykład, jeśli dane wejściowe to:

42,world,FALSE
8,16,24,32,40

Wynik powinien być następujący:

[1] "world"
[[1]]
[1] FALSE

[1] 24
[1] 120

Wyjaśnienie:

  • my_list[[2]] wyodrębnia właściwą wartość tekstową: "world"
  • my_list[3] zwraca podlistę zawierającą FALSE (zwróć uwagę na [[1]] w wyniku)
  • my_list[[4]][3] uzyskuje dostęp do wektora, a następnie pobiera jego trzeci element: 24
  • sum(my_list[[4]]) oblicza 8+16+24+32+40 = 120

Spróbuj swoich sił

# Wczytaj dane wejściowe
con <- file("stdin", "r")
input1 <- suppressWarnings(readLines(con, n = 1))  # Pierwszy wiersz: trzy wartości oddzielone przecinkami
input2 <- suppressWarnings(readLines(con, n = 1))  # Drugi wiersz: liczby oddzielone przecinkami, tworzące wektor
close(con)

# Podziel pierwszy wiersz danych wejściowych na osobne wartości
values <- strsplit(input1, ",")[[1]]
numeric_val <- as.numeric(values[1])
text_val <- values[2]
logical_val <- as.logical(values[3])

# Przekształć drugi wiersz danych wejściowych w wektor liczbowy
vector_val <- as.numeric(strsplit(input2, ",")[[1]])

# TODO: Napisz swój kod poniżej
# 1. Utwórz listę z czterema elementami: numeric_val, text_val, logical_val i vector_val
# 2. Użyj podwójnych nawiasów kwadratowych [[ ]], aby pobrać i wyświetlić drugi element
# 3. Użyj pojedynczych nawiasów kwadratowych [ ], aby pobrać trzeci element i go wyświetlić
# 4. Uzyskaj dostęp do czwartego elementu za pomocą podwójnych nawiasów kwadratowych, a następnie pobierz jego trzecią wartość
# 5. Wyświetl sumę wszystkich liczb w czwartym elemencie
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