Modyfikowanie list
Część sekcji Podstawy ścieżki R w Coddy. Lekcja 73 z 78.
Skoro wiesz już, jak tworzyć listy i uzyskiwać dostęp do ich elementów, nauczmy się, jak je modyfikować. Możesz zmieniać istniejące elementy, dodawać nowe lub całkowicie usuwać elementy.
Aby zmienić istniejący element, użyj podwójnych nawiasów kwadratowych i przypisania:
my_list <- list(10, "hello", TRUE)
my_list[[2]] <- "world"
print(my_list)Wynik:
[[1]]
[1] 10
[[2]]
[1] "world"
[[3]]
[1] TRUEAby dodać nowy element, po prostu przypisz wartość do indeksu, który jeszcze nie istnieje:
my_list <- list(10, "hello")
my_list[[3]] <- FALSE
print(my_list)Wynik:
[[1]]
[1] 10
[[2]]
[1] "hello"
[[3]]
[1] FALSEAby usunąć element, przypisz mu wartość NULL:
my_list <- list(10, "hello", TRUE)
my_list[[2]] <- NULL
print(my_list)Wynik:
[[1]]
[1] 10
[[2]]
[1] TRUEZauważ, że po usunięciu drugiego elementu pozostałe elementy przesuwają się, aby wypełnić lukę. Element, który znajdował się na pozycji 3, jest teraz na pozycji 2.
Wyzwanie
ŁatwyOtrzymasz trzy wiersze danych wejściowych:
- Trzy wartości oddzielone przecinkami, które posłużą do zainicjowania listy (np.
50,hello,TRUE) - Indeks i nowa wartość oddzielone przecinkiem, służące do modyfikacji (np.
2,goodbye) - Indeks elementu do usunięcia (np.
3)
Wykonaj następujące operacje:
- Utwórz listę zawierającą trzy wartości początkowe (przekonwertuj je na odpowiednie typy: numeryczny, znakowy, logiczny)
- Wyświetl oryginalną listę
- Zmodyfikuj element pod wskazanym indeksem, używając nowej wartości (pozostaw ją jako ciąg znaków)
- Wyświetl listę po modyfikacji
- Dodaj do listy nowy, czwarty element o wartości
999 - Wyświetl listę po dodaniu nowego elementu
- Usuń element pod wskazanym indeksem (z trzeciego wiersza danych wejściowych)
- Wyświetl końcową listę
Na przykład, jeśli dane wejściowe to:
100,world,FALSE
1,updated
2Wynik powinien być następujący:
[[1]]
[1] 100
[[2]]
[1] "world"
[[3]]
[1] FALSE
[[1]]
[1] "updated"
[[2]]
[1] "world"
[[3]]
[1] FALSE
[[1]]
[1] "updated"
[[2]]
[1] "world"
[[3]]
[1] FALSE
[[4]]
[1] 999
[[1]]
[1] "updated"
[[2]]
[1] FALSE
[[3]]
[1] 999Wyjaśnienie:
- Oryginalna lista: 100, "world", FALSE
- Po modyfikacji indeksu 1: "updated", "world", FALSE
- Po dodaniu czwartego elementu: "updated", "world", FALSE, 999
- Po usunięciu elementu o indeksie 2: "updated", FALSE, 999 (pozostałe elementy przesuwają się)
Pamiętaj, aby do modyfikacji używać podwójnych nawiasów [[ ]], a do usuwania elementów przypisać NULL.
Spróbuj swoich sił
# Wczytaj dane wejściowe
con <- file("stdin", "r")
initial_values <- suppressWarnings(readLines(con, n = 1)) # Trzy wartości oddzielone przecinkami
modify_input <- suppressWarnings(readLines(con, n = 1)) # Indeks i nowa wartość
remove_index <- suppressWarnings(readLines(con, n = 1)) # Indeks elementu do usunięcia
close(con)
# Przetwórz wartości początkowe
values <- strsplit(initial_values, ",")[[1]]
val1 <- as.numeric(values[1])
val2 <- values[2]
val3 <- as.logical(values[3])
# Przetwórz dane wejściowe dotyczące modyfikacji
mod_parts <- strsplit(modify_input, ",")[[1]]
mod_index <- as.numeric(mod_parts[1])
mod_value <- mod_parts[2]
# Przetwórz indeks elementu do usunięcia
rem_index <- as.numeric(remove_index)
# TODO: Napisz swój kod poniżej
# 1. Utwórz listę z trzema wartościami początkowymi (val1, val2, val3)
# 2. Wyświetl pierwotną listę
# 3. Zastąp element o indeksie mod_index wartością mod_value
# 4. Wyświetl listę po modyfikacji
# 5. Dodaj nowy, czwarty element o wartości 999
# 6. Wyświetl listę po dodaniu elementu
# 7. Usuń element o indeksie rem_index (użyj NULL)
# 8. Wyświetl końcową listę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 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