#r
Вопрос:
Существует ли простой, базовый подход r для создания последовательности чисел из более широкого ПОВТОРЯЮЩЕГОСЯ набора? Например, думая о месяцах года, как я могу создать последовательность на основе месяцев начала /окончания, чтобы:
>fx(5:10)
5, 6, 7, 8, 9, 10
но также и то, что
>fx(10:3)
10, 11, 12, 1, 2, 3
Я знаю, что это возможно, основываясь на нескольких строках неэлегантного кода, но я уверен, что там есть что-то простое и лаконичное.
Комментарии:
1. Выезд
length.out=
вrep()
Ответ №1:
Один из вариантов использования по модулю:
f <- function(start, end, max) (seq(start, end (end < start) * max) - 1) %% max 1
f(5, 10, 12)
[1] 5 6 7 8 9 10
f(10, 3, 12)
[1] 10 11 12 1 2 3
Ответ №2:
Это не очень элегантно, но одна строка делает свое дело, если последовательность представляет собой набор целых чисел из 1:m
.
fx <- function(f, l, m) (y <- (1:m)[c(f:m, 2:f - 1)])[1:which(y == l)]
> fx(5, 10, m = 12)
[1] 5 6 7 8 9 10
> fx(10, 3, m = 12)
[1] 10 11 12 1 2 3
Комментарии:
1. Оба представленных ответа довольно просты/элегантны! Саша первым дал полный ответ.