R использует seq и rep, чтобы создать последовательность из 5 целых чисел, которая увеличивается на 1 при каждом повторении - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь создать вектор: 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9 используя функции rep и seq

Пока у меня есть это:

rep(seq(1,5),5)

Что дает:

1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5

Я не могу при жизни понять, как добавить +1 постепенно.

Я пробовал rep(seq(1,5),5,+1) и rep(seq(1,5),5, each +1 и многие другие варианты.

Нужен ли цикл for?

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Использование функции R векторов рециркуляции:

1:5 + rep(0:4, each = 5)
# [1] 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9

Обратите внимание, что 1:5 дает тот же результат, что и seq(1,5).

0 голосов
/ 15 января 2019

Это был бы случай разделяй и властвуй. Таким образом, вы в основном хотите построить последовательность 1-5, 2-6, 3-7, 4-8, 5-9. Шаблон здесь i- (i + 4).

Итак, вот решение:

unlist(lapply(1:5, function(i) seq(i, i+4)))

Вы выполняете свой подшаблон для i = 1-5. Результатом является список, поэтому вы удаляете его из списка, приводя вас к простому

 [1] 1 2 3 4 5 2 3 4 5 6 3 4 5 6 7 4 5 6 7 8 5 6 7 8 9

Редактировать: Да, вам действительно нужен "цикл", но это ясно показывает, что в R многие операции цикла могут выполняться с функциями *apply (sapply, lapply , apply, mapply).

В этом случае мы выполняем одинаковую функцию для разных значений, поэтому проще использовать sapply. Если у вас есть расчет, в котором вы полагаетесь на предыдущее значение или строку, традиционные циклы - это то, что вам нужно.

Здесь ваша функция seq(i, i+4). Когда это так просто, мы не удосуживаемся присвоить его имени, а вместо этого создали функцию «лямбда» или «анонимную» функцию. Точно такой же результат можно было бы получить:

sequence_1_to_4 <- function(i) {
  seq(i, i+4)
}
sequences <- lapply(1:5, sequence_1_to_4)
single_sequence <- unlist(sequences)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...