Создайте последовательность чисел из повторяющегося набора (например, месяцев).

#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. Оба представленных ответа довольно просты/элегантны! Саша первым дал полный ответ.