Векторы — сердце R
Главная структура данных R — вектор. Учимся создавать векторы и понимать векторные вычисления.
Вектор — упорядоченный набор значений одного типа, базовая единица данных в R.
В большинстве языков, чтобы сложить два списка чисел поэлементно, нужен цикл. В R этого почти никогда не требуется: операции автоматически применяются ко всем элементам вектора. Это и делает R таким удобным для данных — целую колонку таблицы можно обработать одной строкой кода, без явного перебора.
Почему это важно именно для анализа данных? Реальные наборы — это тысячи и миллионы значений: цены, температуры, отметки времени, баллы. Если бы каждое такое преобразование требовало цикла, код был бы длинным, медленным и полным ошибок. Векторное мышление — главная идея R: вы оперируете не отдельными числами, а целыми наборами сразу. Привыкнув к нему, вы начнёте писать короче и яснее.
Создание вектора функцией c()
Чтобы объединить несколько значений в вектор, используют функцию c (от combine — «объединить»):
ages <- c(25, 30, 22, 41)
agesВывод:
[1] 25 30 22 41
Теперь ages — вектор из четырёх чисел. Даже одиночное x <- 5 в R — это вектор длины 1, поэтому при выводе мы видели [1].
Векторные операции
Самое мощное свойство — арифметика применяется поэлементно. Прибавим единицу ко всем возрастам сразу:
ages <- c(25, 30, 22, 41)
ages + 1Вывод:
[1] 26 31 23 42
Никакого цикла не нужно — R сам прошёл по каждому элементу. Так же работают *, -, / и встроенные функции: sum(ages) вернёт сумму, length(ages) — количество элементов.
Как работает под капотом
Когда длины операндов разные, R применяет переработку (recycling): короткий вектор «повторяется» до длины длинного. Например, c(1, 2, 3, 4) + c(10, 20) даст 11 22 13 24 — короткий вектор c(10, 20) повторился. Если длинный вектор не делится нацело на короткий, R выдаст предупреждение, но результат всё равно посчитает. Это удобно (легко прибавить число ко всему вектору), но иногда становится источником скрытых ошибок.
Частые ошибки
- Складывать векторы разной длины не подумав. Из-за recycling ошибка не всегда заметна — проверяйте
length(). - Забыть
c(). Записьages <- 25, 30, 22— синтаксическая ошибка. Значения объединяет именно функцияc(). - Смешивать типы. Вектор хранит значения одного типа; об этом — следующий урок.
Итог
- Вектор — упорядоченный набор значений одного типа.
- Создаётся функцией
c(). - Арифметика применяется ко всем элементам сразу, без цикла.
- При разной длине R повторяет короткий вектор (recycling).