Это был бы случай разделяй и властвуй. Таким образом, вы в основном хотите построить последовательность 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)