0Pricing
R Academy · Урок

Именованные векторы и последовательности

Присваивайте имена элементам векторов и обращайтесь к ним для повышения читаемости кода.

«Именованные векторы и последовательности» — бесплатный урок R Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения R Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс R Academy содержит 4 уроков всего.

Введение в именованные векторы

Именованный вектор — это вектор, у каждого элемента которого есть соответствующее имя (символьная метка). Имена делают код понятнее и позволяют обращаться к элементам по имени, а не по числовому индексу позиции.

# A plain vector vs a named vector
plain <- c(78, 92, 85, 67)
named <- c(Alice = 78, Bob = 92, Carol = 85, Dave = 67)

cat('Plain vector:', plain, '
')
cat('Named vector:
')
print(named)

Создание именованных векторов с помощью c()

Проще всего создать именованный вектор, указав внутри c() пары name = value. Именами могут быть любые допустимые строки; если они содержат пробелы или специальные символы, заключите их в обратные кавычки или кавычки.

# GDP in trillions USD
gdp <- c(USA = 27.4, China = 18.0, Germany = 4.1,
         Japan = 4.2, UK = 3.1)
cat('GDP values:
')
print(gdp)
cat('Names:', names(gdp), '
')
cat('Values:', unname(gdp), '
')

Функция names()

names(x) получает имена вектора в виде символьного вектора. Имена также можно присвоить после создания с помощью names(x) <- c(...); при этом вектор изменяется на месте.

# Assign names after creation
temps <- c(22.1, 18.5, 25.3, 20.0)
cat('Before naming:', temps, '
')

names(temps) <- c('Mon', 'Tue', 'Wed', 'Thu')
cat('After naming:
')
print(temps)

# Retrieve names
cat('Days:', names(temps), '
')

Доступ к элементам по имени

Обращайтесь к элементам именованного вектора с помощью x["name"] или x[["name"]]. Одинарные скобки [] возвращают именованную выборку, а [[]] — только значение без имени.

scores <- c(Math = 88, Science = 92, English = 75, History = 81)

# Single bracket: keeps name
cat('Math score (with name):
')
print(scores['Math'])

# Double bracket: just the value
cat('Science score (value only):', scores[['Science']], '
')

# Multiple names
cat('STEM subjects:
')
print(scores[c('Math', 'Science')])

setNames() в функциональном стиле

setNames(x, nm) возвращает копию x с именами nm, не изменяя исходный вектор. Это удобно в конвейерах, когда требуется задать имена вектору как часть цепочки операций.

# setNames returns a named copy (does not modify original)
raw_values <- c(0.85, 0.72, 0.91, 0.68)
metrics <- setNames(raw_values, c('Precision', 'Recall', 'F1', 'Accuracy'))

cat('Original (unchanged):', raw_values, '
')
cat('Named metrics:
')
print(metrics)

# Best metric
best_name <- names(which.max(metrics))
cat('Best metric:', best_name, '=', metrics[best_name], '
')

Изменение имён

Отдельные имена можно изменить, обращаясь по индексу к names(x). Это удобно, когда нужно переименовать часть элементов, не создавая весь вектор заново.

prices <- c(apple = 1.20, bannana = 0.80, cherry = 3.50)  # typo!

# Fix a single name
names(prices)[2] <- 'banana'
cat('Fixed names:
')
print(prices)

# Rename all
names(prices) <- c('Apple', 'Banana', 'Cherry')  # capitalise
cat('Capitalised:
')
print(prices)

Именованные последовательности с seq() и names()

Именованную последовательность можно создать, объединив seq() с setNames(). Это особенно удобно для месячных или недельных индексов, где имена добавляют контекст к числовым значениям.

# Monthly average temperature with names
temps_monthly <- setNames(
  c(3.1, 4.2, 8.5, 13.0, 17.2, 21.0, 23.5, 23.0, 19.0, 13.5, 7.8, 4.0),
  month.abb
)
cat('Monthly temps:
')
print(temps_monthly)
cat('Summer avg:', mean(temps_monthly[c('Jun', 'Jul', 'Aug')]), '
')

Фильтрация именованных векторов

Именованные векторы поддерживают индексацию как логическими, так и символьными значениями. Вы можете одновременно выбирать элементы по имени и фильтровать их по значению, что делает именованные векторы очень выразительными для небольших таблиц соответствий.

population <- c(Tokyo = 37.4, Delhi = 32.9, Shanghai = 28.5,
                Dhaka = 22.5, Cairo = 21.3, Mumbai = 20.7)

# Select cities with population > 25 million
big_cities <- population[population > 25]
cat('Cities over 25M:
')
print(big_cities)

# Sort descending by population
cat('Ranked:
')
print(sort(population, decreasing = TRUE))

Удаление имён с помощью unname()

unname(x) удаляет все имена из вектора и возвращает только значения. Это удобно при передаче данных функциям, которые не ожидают именованных векторов, или когда имена визуально загромождают вывод.

named_vec <- c(x1 = 10, x2 = 20, x3 = 30, x4 = 40)
cat('Named:
')
print(named_vec)

unnamed_vec <- unname(named_vec)
cat('Unnamed:
')
print(unnamed_vec)

# Check
cat('Has names after unname:', !is.null(names(unnamed_vec)), '
')

Именованные векторы как таблицы соответствий

Одно из самых мощных применений именованных векторов — таблица соответствий: сопоставление ключей и значений. Вместо цепочки операторов if-else используйте именованный вектор и обращайтесь к нему по индексу.

# Map month abbreviation to number of days
days_in_month <- c(Jan=31, Feb=28, Mar=31, Apr=30, May=31,
                   Jun=30, Jul=31, Aug=31, Sep=30, Oct=31,
                   Nov=30, Dec=31)

# Look up specific months
query <- c('Mar', 'Jul', 'Nov')
cat('Days in', query[1], ':', days_in_month[query[1]], '
')
cat('Days in', query[2], ':', days_in_month[query[2]], '
')
cat('Days in', query[3], ':', days_in_month[query[3]], '
')

Именованные векторы: основные сведения

Краткий обзор возможностей именованных векторов в R:

  • Создание с помощью c(name = value, ...) или присваивание через names(x) <- c(...)
  • Доступ по имени с помощью x['name'] (имя сохраняется) или x[['name']] (только значение)
  • setNames(x, nm) возвращает именованную копию, не изменяя исходный вектор
  • unname(x) удаляет все имена
  • Именованные векторы служат элегантными таблицами соответствий, заменяя цепочки if-else
# Complete workflow
rates <- c(USD = 1.0, EUR = 0.92, GBP = 0.79, JPY = 149.5)

# Convert 100 USD to each currency
amount_usd <- 100
converted <- amount_usd * rates
cat('100 USD in other currencies:
')
print(round(converted, 2))

Быстрая проверка

В чём разница между x['key'] и x[['key']], если x — именованный вектор?

Итоги: именованные векторы

Отличная работа! Основные выводы этого урока:

  • Именованные векторы связывают каждый элемент с символьной меткой
  • Их создают с помощью синтаксиса c(name = val) или задают имена через names(x) <- ...
  • x['name'] возвращает именованную выборку, а x[['name']] — только значение
  • setNames() — функциональный способ добавить имена без изменения исходного вектора
  • Используйте именованные векторы как таблицы соответствий, заменяя громоздкие цепочки if-else
  • unname() удаляет имена, когда нужны исходные значения
# Named vector as grade lookup
grade_map <- c('90'='A', '80'='B', '70'='C', '60'='D')
student_score <- 80

# Find grade bracket
brackets <- c(90, 80, 70, 60)
threshold <- max(brackets[brackets <= student_score])
cat('Score:', student_score, '-> Grade:', grade_map[as.character(threshold)], '
')

Часто задаваемые вопросы

Урок «Именованные векторы и последовательности» бесплатный?

Да — полный текст урока «Именованные векторы и последовательности» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс R Academy, подпишись на CoddyKit PRO. Курс R Academy содержит 4 уроков всего.

Чему я научусь в уроке «Именованные векторы и последовательности»?

Присваивайте имена элементам векторов и обращайтесь к ним для повышения читаемости кода. Ты практикуешь R Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать R Academy?

Предыдущий опыт не требуется. R Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Именованные векторы и последовательности»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке R Academy?

Да. Каждый урок R Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Оператор двоеточия для целочисленных диапазонов
  2. seq() для пользовательских последовательностей
  3. rep() для повторения значений
  4. Именованные векторы и последовательности
← Назад к R Academy