Последовательности и полезные функции

Учимся быстро создавать последовательности чисел и применять к векторам сводные функции.

Последовательность — вектор чисел, идущих с постоянным шагом; в 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 схлопывают вектор в одно число.
Проверьте себя
1. Что вернёт выражение 3:7 в R?
A[1] 3 7
B[1] 3 4 5 6 7
C[1] 21
D[1] 4
2. Какой аргумент seq задаёт величину шага?
Astep
Bby
Clength.out
Deach
3. Что делает функция mean(x)?
AНаходит максимум
BСчитает среднее арифметическое элементов вектора
CСортирует вектор
DСчитает количество элементов