Последовательности и полезные функции
Учимся быстро создавать последовательности чисел и применять к векторам сводные функции.
Последовательность — вектор чисел, идущих с постоянным шагом; в R их создают парой компактных инструментов.
Часто нужен ряд чисел: от 1 до 100, чётные числа, повторяющийся шаблон. Вручную набирать их в c() утомительно и чревато опечатками. В R для этого есть оператор двоеточие и функции seq и rep. Последовательности нужны не только сами по себе: их используют как индексы (выбрать каждый второй элемент), как оси для графиков, как сетку значений при моделировании. Поэтому умение быстро порождать ряды чисел — базовый навык, который пригодится почти в каждом разделе курса.
Оператор двоеточие
Самый быстрый способ получить ряд подряд идущих целых — двоеточие:
1:10Вывод:
[1] 1 2 3 4 5 6 7 8 9 10
Это вектор из десяти чисел. Двоеточие работает и в обратную сторону: 5:1 даст 5 4 3 2 1.
Функция seq для произвольного шага
Когда нужен шаг, отличный от единицы, используют seq:
seq(0, 20, by = 5)
seq(0, 1, length.out = 5)Вывод:
[1] 0 5 10 15 20 [1] 0.00 0.25 0.50 0.75 1.00
Аргумент by задаёт шаг, а length.out — сколько всего значений нужно (R сам вычислит шаг).
Повтор и сводные функции
Функция rep повторяет значения, а сводные функции схлопывают вектор в одно число:
rep(c(1, 2), times = 3)
x <- c(4, 8, 15, 16, 23, 42)
min(x)
max(x)
mean(x)Вывод:
[1] 1 2 1 2 1 2 [1] 4 [1] 42 [1] 18
Как работает под капотом
Последовательности — это обычные числовые векторы, просто построенные компактно. 1:10 создаёт ровно тот же объект, что и c(1,2,3,4,5,6,7,8,9,10). Поэтому к ним применимы все векторные операции: (1:5) * 2 даст 2 4 6 8 10. А ещё последовательности часто служат индексами — об этом в следующем разделе.
Частые ошибки
- Путать приоритет двоеточия. Запись
1:n+1читается как(1:n)+1, а не1:(n+1). Используйте скобки. - Забыть имена аргументов в
seq.byиlength.outлучше писать явно, чтобы не перепутать порядок. - Ждать от
meanработы со строками. Сводные функции работают только с числами.
Итог
- Двоеточие
1:10создаёт ряд подряд идущих целых. seq(from, to, by=)илиlength.out=— произвольный шаг.repповторяет значения.min,max,meanсхлопывают вектор в одно число.