0Pricing
R Academy · Урок

seq() для пользовательских последовательностей

Управляйте размером шага, длиной и направлением с помощью seq().

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

Введение в seq()

seq() — гибкий генератор последовательностей в R. Если : создаёт целочисленные диапазоны с шагом 1, то seq() позволяет управлять началом, концом, размером шага и общей длиной любой числовой последовательности.

# Basic seq() usage
basic <- seq(1, 10)
cat('seq(1, 10):', basic, '
')

# With step size
by_two <- seq(0, 20, by = 2)
cat('seq(0, 20, by=2):', by_two, '
')

seq(from, to, by) — пользовательский шаг

Аргумент by задаёт размер шага между соседними значениями. Это может быть любое положительное или отрицательное число, включая дроби. Такой способ удобен для создания равномерно расположенных значений с нецелым интервалом.

# Decimal step
celsius <- seq(0, 100, by = 12.5)
cat('Every 12.5 degrees:', celsius, '
')

# Step of 0.1
fine_scale <- seq(1.0, 1.5, by = 0.1)
cat('Fine scale:', fine_scale, '
')

# Negative step (descending)
countdown <- seq(10, 0, by = -2)
cat('Countdown by 2:', countdown, '
')

seq(from, to, length.out) — фиксированное количество

Если Вам известно, сколько значений требуется, а не то, каким должен быть шаг, используйте length.out. R автоматически вычислит шаг, чтобы равномерно разделить интервал.

# 5 evenly spaced points between 0 and 1
unit_interval <- seq(0, 1, length.out = 5)
cat('5 points in [0,1]:', unit_interval, '
')

# 7 breakpoints for a histogram
breakpoints <- seq(0, 100, length.out = 7)
cat('Histogram breaks:', breakpoints, '
')

# Step is automatically calculated
step <- (100 - 0) / (7 - 1)
cat('Step size:', step, '
')

seq(along.with = x) — согласование с вектором

seq(along.with = x) создаёт целочисленную последовательность 1:length(x), идентичную seq_along(x). Она удобна, когда нужно сопоставить последовательность индексов с существующим вектором.

rainfall <- c(55.2, 62.1, 48.7, 71.3, 38.9, 90.4, 45.0)

# Generate matching index sequence
idx <- seq(along.with = rainfall)
cat('Indices:', idx, '
')
cat('Rainfall:', rainfall, '
')

# Use to find position of max
cat('Position of max rainfall:', which.max(rainfall), '
')
cat('Max rainfall:', max(rainfall), 'mm
')

seq_len(n) — безопасный диапазон от 1 до n

seq_len(n) эквивалентна seq(1, n) или 1:n, но корректно обрабатывает особый случай n = 0, возвращая пустой целочисленный вектор вместо c(1, 0).

# Normal use
cat('seq_len(5):', seq_len(5), '
')

# Edge case: n = 0
cat('1:0       :', 1:0, '
')       # produces 1 0 (WRONG)
cat('seq_len(0):', seq_len(0), '
') # produces integer(0) (CORRECT)

# In practice: safe loop
my_data <- c()  # intentionally empty
for (i in seq_len(length(my_data))) {
  cat('Processing item', i, '
')
}
cat('Loop completed without error
')

Отрицательные шаги с помощью seq()

Отрицательное значение by создаёт убывающую последовательность. При использовании отрицательного шага значение from должно быть больше to, иначе R выдаст предупреждение.

# Countdown from 100 to 0
countdown_100 <- seq(100, 0, by = -10)
cat('Countdown:', countdown_100, '
')

# Temperature drop simulation
start_temp <- 30.0
end_temp <- 15.0
hourly_temps <- seq(start_temp, end_temp, by = -1.5)
cat('Hourly cooling:', hourly_temps, '
')

Последовательности с плавающей точкой

Будьте осторожны с шагами с плавающей точкой: небольшие ошибки округления могут привести к неожиданному включению или исключению последнего значения. Использование length.out вместо by позволяет избежать этой проблемы.

# Floating point step: may include or exclude endpoint
seq_by <- seq(0, 1, by = 0.1)
cat('By 0.1 (', length(seq_by), 'values):', seq_by, '
')

# length.out: always exactly n values
seq_lo <- seq(0, 1, length.out = 11)
cat('length.out=11:', seq_lo, '
')

# Check: are they the same?
cat('Identical?', identical(seq_by, seq_lo), '
')

Использование seq() для осей графика

Одно из распространённых применений seq() — создание значений для математических функций или отметок на осях. Эта функция позволяет вычислять значения функции на интервале через регулярные промежутки.

# Sample a sine wave
x_vals <- seq(0, 2 * pi, length.out = 13)
y_vals <- round(sin(x_vals), 3)
cat('x values (radians):', round(x_vals, 2), '
')
cat('sin(x) values:      ', y_vals, '
')

# Find the approximate peak
cat('Peak near x =', round(x_vals[which.max(y_vals)], 3), '
')

Сравнение seq() и :

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

# These produce the same integer sequence
a <- 1:5
b <- seq(1, 5)
c_seq <- seq(1, 5, by = 1)
d <- seq(1, 5, length.out = 5)

cat('1:5            :', a, '
')
cat('seq(1,5)       :', b, '
')
cat('seq(1,5,by=1)  :', c_seq, '
')
cat('seq(1,5,lo=5)  :', d, '
')
cat('All identical? :', identical(a, d), '
')

Практика: создание временных точек

seq() идеально подходит для создания временных осей при анализе данных — например, для формирования месячных, квартальных или годовых интервалов при работе с временными рядами.

# Monthly data points (as numeric month indices)
months_idx <- seq(1, 12, by = 1)
month_names <- month.abb  # built-in R constant
cat('Month indices:', months_idx, '
')
cat('Month names  :', month_names, '
')

# Quarterly: every 3 months
quarters <- seq(1, 12, by = 3)
cat('Quarter starts:', quarters, '
')
cat('Quarter names :', month_names[quarters], '
')

Краткий обзор аргументов seq()

Краткая памятка по аргументам seq():

  • from — начальное значение (по умолчанию 1)
  • to — конечное значение (по умолчанию 1)
  • by — размер шага между значениями
  • length.out — точное количество создаваемых значений
  • along.with — соответствие длине другого вектора

Следует указывать только один из аргументов: by или length.out.

# Five different forms of seq()
cat('seq(5)               :', seq(5), '
')
cat('seq(2, 10)           :', seq(2, 10), '
')
cat('seq(0, 1, by=0.25)   :', seq(0, 1, by = 0.25), '
')
cat('seq(0, 1, length.out=5):', seq(0, 1, length.out = 5), '
')
cat('seq(along.with=1:4)  :', seq(along.with = 1:4), '
')

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

Сколько значений создаёт seq(0, 1, length.out = 6)?

Итоги: seq() для настраиваемых последовательностей

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

  • seq(from, to, by) — создание последовательности с фиксированным размером шага
  • seq(from, to, length.out = n) — создание ровно n равномерно распределённых значений
  • seq(along.with = x) — создание индексов, соответствующих вектору x
  • seq_len(n) — безопасная версия 1:n (обрабатывает случай n=0)
  • Для последовательностей с плавающей точкой предпочтительнее использовать length.out, а не by, чтобы избежать проблем с округлением
  • Используйте seq(), когда возможностей : недостаточно (например, нужны нецелые шаги или фиксированное количество значений)
# Final demo: all seq() forms
cat('Even 0-10:    ', seq(0, 10, by = 2), '
')
cat('5 in [0,1]:   ', seq(0, 1, length.out = 5), '
')
cat('Match 3-elem: ', seq(along.with = c('a', 'b', 'c')), '
')
cat('Safe 1:0:     ', seq_len(0), '(empty)
')

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

Урок «seq() для пользовательских последовательностей» бесплатный?

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

Чему я научусь в уроке «seq() для пользовательских последовательностей»?

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

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

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

Сколько времени занимает урок «seq() для пользовательских последовательностей»?

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

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

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

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

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