Именованные векторы
Часть раздела Основы путешествия по R на Coddy. Урок 62 из 78.
До сих пор вы обращались к элементам вектора, используя числовые позиции. Но что, если бы вместо этого к ним можно было обращаться по осмысленным именам? Именованные векторы позволяют присвоить метки каждому элементу, делая ваш код более понятным и самодокументируемым.
Вы можете создать именованный вектор, указав имена во время создания:
ages <- c(alice = 25, bob = 30, charlie = 28)
print(ages)Результат:
alice bob charlie
25 30 28Чтобы обращаться к элементам по имени, используйте имя в виде строки внутри квадратных скобок:
print(ages["bob"])Вывод:
bob
30Вы также можете добавить имена к существующему вектору с помощью функции names():
scores <- c(85, 92, 78)
names(scores) <- c("math", "science", "english")
print(scores["math"])Вывод:
math
85Именованные векторы особенно полезны при работе с данными, имеющими естественные метки, например при хранении оценок студентов по предметам или цен по названиям товаров.
Задание
ЛегкоВы получите две строки входных данных:
- Разделённый запятыми список названий продуктов (например,
laptop,phone,tablet,headphones) - Разделённый запятыми список соответствующих цен (например,
999,699,449,199)
Выполните следующие операции:
- Создайте числовой вектор из цен
- Назначьте названия продуктов вектору с помощью функции
names() - Выведите весь именованный вектор
- Выведите цену второго продукта, обратившись к нему по его названию
- Выведите цену последнего продукта, обратившись к нему по его названию
Например, если входные данные имеют вид:
apple,banana,orange,grape
2,1,3,4Вывод должен быть таким:
apple banana orange grape
2 1 3 4
banana
1
grape
4Примечание: обращайтесь ко второму и последнему элементам, используя имя в качестве индекса (строку, например prices["banana"]), а не числовую позицию. Названия берутся из первой строки входных данных, поэтому сначала найдите там нужное название.
Попробуйте сами
# Прочитать ввод
con <- file("stdin", "r")
products_input <- suppressWarnings(readLines(con, n = 1))
prices_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# Разобрать входные данные, разделённые запятыми
product_names <- strsplit(products_input, ",")[[1]]
price_values <- strsplit(prices_input, ",")[[1]]
# TODO: Напишите ваш код ниже
# 1. Создайте числовой вектор из цен
# 2. Присвойте названия продуктов вектору с помощью names()
# 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, :)Вложенные циклыПовторение: Динамический ввод3Операторы. Часть 1
Арифметические операторыЦелочисленное деление и остаток от деленияОператоры присваиванияПовторение: простая математикаОператоры сравнения6Основы ввода-вывода
Вывод через printКоманда cat для выводаВывод с переменнымиЧтение ввода через readline()Основы преобразования типовПовторение — Калькулятор возрастаПовторение — Истина или ложь9Функции
Объявление функцииАргументы функцииВозвращаемые значенияПовторение — функция SigmaПовторение — функция валидацииЗначения параметров по умолчанию12Итерация по последовательностям
Итерация по элементам вектораИспользование seq_along()Итерация по символам (strsplit)Функции для работы со строкамиПотренируйтесь самостоятельно: Онлайн-компилятор R