rep() для повторения значений
Повторяйте значения и векторы с помощью rep(), аргументов times и each.
«rep() для повторения значений» — бесплатный урок R Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения R Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс R Academy содержит 4 уроков всего.
Введение в rep()
rep() — сокращение от replicate. Эта функция повторяет значения или векторы заданное число раз. Это один из самых полезных инструментов для создания структурированных тестовых данных, сбалансированных наборов данных и заполнения векторов значениями по умолчанию.
# Repeat a single value
zeros <- rep(0, times = 5)
cat('Five zeros:', zeros, '
')
# Repeat a string
status <- rep('active', times = 4)
cat('Status:', status, '
')rep(x, times) — повторение всего вектора
Если x — вектор, а times — одно целое число, rep() повторяет весь вектор указанное число раз. Длина результата равна length(x) * times.
# Repeat a vector 3 times
weekend <- c('Saturday', 'Sunday')
four_weekends <- rep(weekend, times = 4)
cat('4 weekends:', four_weekends, '
')
# Repeat numeric vector
pattern <- c(1, 2, 3)
cat('Pattern x3:', rep(pattern, times = 3), '
')rep(x, each) — повторение каждого элемента
Аргумент each повторяет каждый отдельный элемент, прежде чем перейти к следующему. В этом заключается его главное отличие от times: each повторяет элементы на их исходных местах.
groups <- c('A', 'B', 'C')
# times: repeats whole vector
cat('times=3:', rep(groups, times = 3), '
')
# A B C A B C A B C
# each: repeats each element before next
cat('each=3 :', rep(groups, each = 3), '
')
# A A A B B B C C Crep(x, times = c(...)) — переменное число повторений
Если times — это вектор той же длины, что и x, каждый элемент x повторяется соответствующее ему число раз. Это позволяет точно управлять повторениями.
# Different number of repeats per element
fruits <- c('apple', 'banana', 'cherry')
counts <- c(3, 1, 2)
fruit_basket <- rep(fruits, times = counts)
cat('Fruit basket:', fruit_basket, '
')
# apple apple apple banana cherry cherry
# Useful for creating category labels
cat('Length:', length(fruit_basket), '
')rep_len() — повторение до фиксированной длины
rep_len(x, length.out) повторяет вектор x, пока результат не достигнет ровно length.out элементов. Повторение выполняется циклически: при необходимости функция снова начинает с начала вектора.
# Cycle through seasons to fill 12 months
seasons <- c('Spring', 'Summer', 'Autumn', 'Winter')
year_seasons <- rep_len(seasons, length.out = 12)
cat('12 months by season:', year_seasons, '
')
# Cycle through 1, 2, 3 for 10 items
rotation <- rep_len(1:3, length.out = 10)
cat('Rotation:', rotation, '
')Комбинирование times и each
Вы можете использовать times и each вместе, чтобы создавать более сложные схемы повторения. R сначала применяет each (повторяя каждый элемент), а затем повторяет получившийся вектор times раз.
# each=2 then times=3
vals <- c(1, 2)
result <- rep(vals, each = 2, times = 3)
cat('each=2, times=3:', result, '
')
# 1 1 2 2 repeated 3 times: 1 1 2 2 1 1 2 2 1 1 2 2
cat('Length:', length(result), '
')Создание меток сбалансированных групп
Классическое применение rep() — создание меток сбалансированных групп для экспериментов, в которых требуется одинаковое число наблюдений в каждой группе.
# 5 subjects per treatment group
treatments <- c('Control', 'LowDose', 'HighDose')
n_per_group <- 5
group_labels <- rep(treatments, each = n_per_group)
cat('Group labels:', group_labels, '
')
cat('Total subjects:', length(group_labels), '
')
# Count per group
for (g in treatments) {
cat(g, ':', sum(group_labels == g), '
')
}Повторение логических значений
rep() работает с любыми типами данных, включая логические значения. Это удобно для создания масок, флагов или чередующихся шаблонов TRUE/FALSE.
# Alternating TRUE/FALSE pattern
alternate <- rep(c(TRUE, FALSE), times = 5)
cat('Alternating mask:', alternate, '
')
# Apply mask to select every other element
data_vals <- 10:19
cat('Every other value:', data_vals[alternate], '
')
# Create a block pattern: 3 TRUE then 3 FALSE
block <- rep(c(TRUE, FALSE), each = 3)
cat('Block pattern:', block, '
')Заполнение матриц с помощью rep()
С помощью rep() можно быстро заполнять матрицы данными по определённому шаблону. Поскольку matrix() принимает вектор в качестве входных данных, их сочетание упрощает создание шаблонных матриц.
# Fill a 3x4 matrix with a repeating pattern
pattern <- rep(c(1, 0), times = 6)
checker <- matrix(pattern, nrow = 3, ncol = 4)
cat('Checkerboard-like matrix:
')
print(checker)
# Fill diagonal-like with rep
fill <- rep(1:4, each = 3)
cat('Repeated fill:', fill, '
')Расширение сводной таблицы
Практическое применение rep() с переменным значением times — преобразование таблицы частот обратно в вектор исходных данных. Если известно, сколько раз встречалось каждое значение, rep() восстанавливает наблюдения.
# Summary: grade frequencies
grades <- c('A', 'B', 'C', 'D')
frequencies <- c(5, 12, 8, 3)
# Reconstruct raw grade vector
raw_grades <- rep(grades, times = frequencies)
cat('Raw grades (', length(raw_grades), 'students):', raw_grades, '
')
# Verify frequency table
cat('Freq table:
')
print(table(raw_grades))Обзор rep()
Краткая памятка по rep():
rep(x, times = n)— повторить весь x n разrep(x, each = n)— повторить каждый элемент n разrep(x, times = c(...))— переменное число повторений для каждого элементаrep_len(x, n)— циклически повторять x, пока не будет достигнуто ровно n элементов- Работает с любыми типами: числовым, символьным, логическим и фактором
x <- c(10, 20, 30)
cat('times=2 :', rep(x, times = 2), '
')
cat('each=2 :', rep(x, each = 2), '
')
cat('var times:', rep(x, times = c(1, 2, 3)), '
')
cat('rep_len :', rep_len(x, 7), '
')Быстрая проверка
Что возвращает rep(c(1, 2), each = 3)?
Итоги: rep() для повторения значений
Превосходно! Основные выводы этого урока:
rep(x, times)повторяет весь вектор, аrep(x, each)— каждый элемент отдельно- Передача вектора в
timesзадаёт переменное число повторений для каждого элемента rep_len(x, n)циклически повторяет x, пока не будут созданы ровно n элементов- Распространённые применения: метки сбалансированных групп, маски, расширение таблиц частот и шаблонные матрицы
- Одинаково работает с числовыми, символьными и логическими типами данных
# Create a balanced experiment design
treatments <- c('Placebo', 'Drug_A', 'Drug_B')
subjects_per <- 4
design <- rep(treatments, each = subjects_per)
cat('Experiment design:
')
cat(design, '
')
cat('Total N:', length(design), '
')Часто задаваемые вопросы
Урок «rep() для повторения значений» бесплатный?
Да — полный текст урока «rep() для повторения значений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс R Academy, подпишись на CoddyKit PRO. Курс R Academy содержит 4 уроков всего.
Чему я научусь в уроке «rep() для повторения значений»?
Повторяйте значения и векторы с помощью rep(), аргументов times и each. Ты практикуешь R Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать R Academy?
Предыдущий опыт не требуется. R Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «rep() для повторения значений»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке R Academy?
Да. Каждый урок R Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Оператор двоеточия для целочисленных диапазонов
- seq() для пользовательских последовательностей
- rep() для повторения значений
- Именованные векторы и последовательности