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] 42Pojedyncze nawiasy zwracają podlistę zawierającą element, a nie sam element:
my_list <- list(42, "hello", TRUE)
print(my_list[1])Wynik:
[[1]]
[1] 42To 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] 20Tutaj 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ę.
Wyzwanie
ŁatwyOtrzymasz dwa wiersze danych wejściowych:
- Trzy wartości różnych typów oddzielone przecinkami (np.
100,hello,TRUE) - 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:
- Utwórz listę z czterema elementami: wartością liczbową, tekstem, wartością logiczną i wektorem liczb
- Użyj podwójnych nawiasów, aby wyodrębnić i wydrukować drugi element (wartość tekstową)
- Użyj pojedynczych nawiasów, aby wyodrębnić trzeci element i wydrukować wynik (zwróć uwagę na różnicę w formacie wyjściowym)
- 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
- 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,40Wynik powinien być następujący:
[1] "world"
[[1]]
[1] FALSE
[1] 24
[1] 120Wyjaś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: 24sum(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 elemencieTa 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 danych11Wektory
Tworzenie wektorów za pomocą c()Dostęp do elementów wektoraModyfikowanie wektorówOperacje na wektorachPowtórka – wektor cenowyPowtórka – odwrócony wektorWektory nazwane14Listy w R
Tworzenie listDostęp do elementów listyModyfikowanie listListy nazwanePowtórka — lista produktów3Operatory, 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ówPoćwicz samodzielnie: Kompilator R online