Однострочник для создания списка итерационных последовательностей? - PullRequest
0 голосов
/ 10 мая 2018

Мне нужно создать список последовательностей, который всегда возвращается к первой цифре в последовательности.Я написал код ниже, но он кажется неуклюжим.Есть ли решение, которое использует меньше символов?

(i = seq(1, 24, by = 3))
#> [1]  1  4  7 10 13 16 19 22
(i_list = purrr::map(i, ~c(.:(. + 2), .)))
#> [[1]]
#> [1] 1 2 3 1
#> 
#> [[2]]
#> ...

Редактировать: вот способ с lapply().Не уверен, почему это получает отрицательные отзывы, любые советы о том, как улучшить вопрос, добро пожаловать!

(i_list = lapply(i, function(x) c(x:(x+2), x)))

Мне было интересно, есть ли способ с replicate(), поэтому я добавил этот тег.

1 Ответ

0 голосов
/ 10 мая 2018

В матрице, а не в форме списка, есть:

cbind(matrix(1:24, ncol=3,byrow=TRUE),seq(1, 24, by = 3))

     [,1] [,2] [,3] [,4]
[1,]    1    2    3    1
[2,]    4    5    6    4
[3,]    7    8    9    7
[4,]   10   11   12   10
[5,]   13   14   15   13
[6,]   16   17   18   16
[7,]   19   20   21   19
[8,]   22   23   24   22

, и затем вы будете перебирать строки матрицы вместо элементов списка.

Или, если вы занимаетесь гольфом кода:

> seq(1,24,by=3) + t(matrix(c(0,1,2,0),ncol=8,nrow=4))
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    1
[2,]    4    5    6    4
[3,]    7    8    9    7
[4,]   10   11   12   10
...

, но тогда сколько работы вы потратите на построение RHS + в этом случае?Как ваш вопрос параметризован?

Это зависит от i, имеющего регулярный шаблон (с некоторой поправкой на размер шага), он не работает для произвольных i последовательностей.

...