Доступ к элементам списка
Часть раздела Основы путешествия по R на Coddy — урок 72 из 78.
Списки используют другой синтаксис для доступа к элементам по сравнению с векторами. Ключевое различие заключается в использовании одинарных скобок [ ] и двойных скобок [[ ]].
Двойные квадратные скобки извлекают сам элемент из списка:
my_list <- list(42, "hello", TRUE)
print(my_list[[1]])Вывод:
[1] 42Одинарные квадратные скобки возвращают подсписок, содержащий элемент, а не сам элемент:
my_list <- list(42, "hello", TRUE)
print(my_list[1])Вывод:
[[1]]
[1] 42Это различие имеет значение, когда вы хотите работать с самим значением. Если элемент списка является вектором, двойные скобки позволяют получить к нему прямой доступ, а затем использовать индексацию вектора:
my_list <- list(c(10, 20, 30), "text")
print(my_list[[1]][2])Вывод:
[1] 20Здесь my_list[[1]] извлекает вектор, а [2] обращается к его второму элементу. Помните: используйте [[ ]], когда вам нужно само содержимое, и [ ], когда вам нужен список меньшего размера.
Задание
ЛегкоВы получите две строки входных данных:
- Три значения разных типов, разделенных запятыми (например,
100,hello,TRUE) - Список чисел, разделенных запятыми, представляющий вектор, который должен быть сохранен как четвертый элемент (например,
5,10,15,20)
Выполните следующие операции:
- Создайте список из четырех элементов: числовое значение, текст, логическое значение и вектор чисел
- Используйте двойные скобки для извлечения и вывода второго элемента (текстового значения)
- Используйте одинарные скобки для извлечения третьего элемента и выведите результат (обратите внимание на разницу в формате вывода)
- Получите доступ к вектору, хранящемуся в четвертом элементе, используя двойные скобки, затем извлеките и выведите его третье значение, используя индексацию вектора
- Выведите сумму всех чисел в четвертом элементе (получите доступ к вектору с помощью двойных скобок и используйте
sum())
Например, если входные данные:
42,world,FALSE
8,16,24,32,40Вывод должен быть:
[1] "world"
[[1]]
[1] FALSE
[1] 24
[1] 120Объяснение:
my_list[[2]]извлекает само текстовое значение: "world"my_list[3]возвращает подсписок, содержащий FALSE (обратите внимание на[[1]]в выводе)my_list[[4]][3]обращается к вектору, а затем получает его третий элемент: 24sum(my_list[[4]])вычисляет 8+16+24+32+40 = 120
Шпаргалка
Списки используют различный синтаксис скобок для доступа к элементам:
Двойные скобки [[ ]] извлекают сам элемент:
my_list <- list(42, "hello", TRUE)
print(my_list[[1]]) # Вывод: [1] 42Одинарные скобки [ ] возвращают подсписок, содержащий элемент:
my_list <- list(42, "hello", TRUE)
print(my_list[1]) # Вывод: [[1]] [1] 42Доступ к вложенным элементам: Используйте двойные скобки для извлечения вектора из списка, а затем используйте индексацию вектора:
my_list <- list(c(10, 20, 30), "text")
print(my_list[[1]][2]) # Вывод: [1] 20Используйте [[ ]], когда вам нужно само содержимое, и [ ], когда вам нужен подсписок.
Попробуйте сами
# Чтение входных данных
con <- file("stdin", "r")
input1 <- suppressWarnings(readLines(con, n = 1)) # Первая строка: три значения, разделенные запятыми
input2 <- suppressWarnings(readLines(con, n = 1)) # Вторая строка: числа для вектора, разделенные запятыми
close(con)
# Разбор первой строки ввода на отдельные значения
values <- strsplit(input1, ",")[[1]]
numeric_val <- as.numeric(values[1])
text_val <- values[2]
logical_val <- as.logical(values[3])
# Разбор второй строки ввода в числовой вектор
vector_val <- as.numeric(strsplit(input2, ",")[[1]])
# TODO: Напишите ваш код ниже
# 1. Создайте список из четырех элементов: numeric_val, text_val, logical_val и vector_val
# 2. Используйте двойные скобки [[ ]], чтобы извлечь и вывести второй элемент
# 3. Используйте одинарные скобки [ ], чтобы извлечь третий элемент и вывести его
# 4. Обратитесь к четвертому элементу с помощью двойных скобок, затем извлеките его третье значение
# 5. Выведите сумму всех чисел в четвертом элементеВ этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
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)Функции для работы со строками