Изменение списков
Часть раздела Основы путешествия по R на Coddy — урок 73 из 78.
Теперь, когда вы знаете, как создавать списки и получать доступ к их элементам, давайте научимся их изменять. Вы можете изменять существующие элементы, добавлять новые или полностью удалять их.
Чтобы изменить существующий элемент, используйте двойные скобки с присваиванием:
my_list <- list(10, "hello", TRUE)
my_list[[2]] <- "world"
print(my_list)Вывод:
[[1]]
[1] 10
[[2]]
[1] "world"
[[3]]
[1] TRUEЧтобы добавить новый элемент, просто присвойте значение индексу, который еще не существует:
my_list <- list(10, "hello")
my_list[[3]] <- FALSE
print(my_list)Вывод:
[[1]]
[1] 10
[[2]]
[1] "hello"
[[3]]
[1] FALSEЧтобы удалить элемент, присвойте ему NULL:
my_list <- list(10, "hello", TRUE)
my_list[[2]] <- NULL
print(my_list)Вывод:
[[1]]
[1] 10
[[2]]
[1] TRUEОбратите внимание, что после удаления второго элемента оставшиеся элементы сдвигаются, чтобы заполнить образовавшееся пространство. Элемент, который находился на позиции 3, теперь находится на позиции 2.
Задание
ЛегкоВы получите три строки входных данных:
- Три значения, разделенных запятыми, для инициализации списка (например,
50,hello,TRUE) - Индекс и новое значение, разделенные запятой, для модификации (например,
2,goodbye) - Индекс элемента, который необходимо удалить (например,
3)
Выполните следующие операции:
- Создайте список с тремя начальными значениями (преобразуйте их в соответствующие типы: числовой, символьный, логический)
- Выведите исходный список
- Измените элемент по указанному индексу на новое значение (сохраните его как символьную строку)
- Выведите список после модификации
- Добавьте в список новый четвертый элемент со значением
999 - Выведите список после добавления нового элемента
- Удалите элемент по указанному индексу (из третьей строки входных данных)
- Выведите финальный список
Например, если входные данные следующие:
100,world,FALSE
1,updated
2Выходные данные должны быть такими:
[[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] 999Объяснение:
- Исходный список: 100, "world", FALSE
- После изменения индекса 1: "updated", "world", FALSE
- После добавления четвертого элемента: "updated", "world", FALSE, 999
- После удаления индекса 2: "updated", FALSE, 999 (оставшиеся элементы смещаются)
Не забудьте использовать двойные скобки [[ ]] для модификации и присваивать NULL для удаления элементов.
Шпаргалка
Чтобы изменить существующий элемент в списке, используйте двойные скобки с присваиванием:
my_list <- list(10, "hello", TRUE)
my_list[[2]] <- "world"Чтобы добавить новый элемент в список, присвойте значение индексу, который еще не существует:
my_list <- list(10, "hello")
my_list[[3]] <- FALSEЧтобы удалить элемент из списка, присвойте ему значение NULL:
my_list <- list(10, "hello", TRUE)
my_list[[2]] <- NULLПри удалении элемента остальные элементы сдвигаются, чтобы заполнить пробел. Элемент, который находился на позиции 3, перемещается на позицию 2.
Попробуйте сами
# Чтение входных данных
con <- file("stdin", "r")
initial_values <- suppressWarnings(readLines(con, n = 1)) # Три значения, разделенные запятыми
modify_input <- suppressWarnings(readLines(con, n = 1)) # Индекс и новое значение
remove_index <- suppressWarnings(readLines(con, n = 1)) # Индекс для удаления
close(con)
# Разбор начальных значений
values <- strsplit(initial_values, ",")[[1]]
val1 <- as.numeric(values[1])
val2 <- values[2]
val3 <- as.logical(values[3])
# Разбор данных для модификации
mod_parts <- strsplit(modify_input, ",")[[1]]
mod_index <- as.numeric(mod_parts[1])
mod_value <- mod_parts[2]
# Разбор индекса для удаления
rem_index <- as.numeric(remove_index)
# TODO: Напишите ваш код ниже
# 1. Создайте список с тремя начальными значениями (val1, val2, val3)
# 2. Выведите исходный список
# 3. Измените элемент по индексу mod_index на значение mod_value
# 4. Выведите список после модификации
# 5. Добавьте новый четвертый элемент со значением 999
# 6. Выведите список после добавления
# 7. Удалите элемент по индексу rem_index (используйте NULL)
# 8. Выведите финальный списокВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы. Часть 2
Логические операторы (AND, OR)Логические операторы. Часть 2 (NOT)Повторение: простая логикаВекторизованная логика. Часть 1Векторизованная логика. Часть 27Калькулятор разделения счета
Приветственное сообщениеПолучение пользовательского ввода13Векторы: продвинутый уровень
Срезы и индексация векторовЛогическая индексацияАрифметика и ресайклинг векторовОператор %in%2Переменные и типы данных
Числовой тип данныхЦелочисленный тип данныхСимвольный тип данныхЛогический тип данныхПроверка типов данныхПравила именованияПропущенные значения: NAИтоги — создание переменных5Принятие решений
Оператор ifКонструкция if - elseПовторение: Простой калькуляторВложенные конструкции if - else8Циклы
Цикл ForЦикл WhileBreakNext (Continue)Повторение: ФакториалГенерация последовательностей (seq, :)Вложенные циклыПовторение: Динамический ввод11Векторы
Создание векторов с помощью c()Доступ к элементам вектораИзменение векторовОперации с векторамиПовторение — Вектор ценПовторение — Обратный векторИменованные векторы14Списки в R
Создание списковДоступ к элементам спискаИзменение списковИменованные спискиПовторение — Список продуктов3Операторы. Часть 1
Арифметические операторыЦелочисленное деление и остаток от деленияОператоры присваиванияПовторение: простая математикаОператоры сравнения6Основы ввода-вывода
Вывод через printКоманда cat для выводаВывод с переменнымиЧтение ввода через readline()Основы преобразования типовПовторение — Калькулятор возрастаПовторение — Истина или ложь9Функции
Объявление функцииАргументы функцииВозвращаемые значенияПовторение — функция SigmaПовторение — функция валидацииЗначения параметров по умолчанию12Итерация по последовательностям
Итерация по элементам вектораИспользование seq_along()Итерация по символам (strsplit)Функции для работы со строками