повторить вектор до n-го элемента

Вектор, который я хочу повторить:

> months2014
[1] "07" "08" "09" "10" "11" "12"

Я хочу повторить это на основе этого вектора, который определяет n-е значения:

> num_times
  [1]  6  6  6  6  5  6  6  5  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6
 [33]  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6 12  6  6  6  6  6  6  6 12  6  6  6  6  6  6
 [65]  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6 12  6
 [97]  6  6 12  6  6  6  6  6  6  6  6 12  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  6  2  6  6
[129]  6 12  6  6  6  6  6  6

Я использовал этот цикл, чтобы получить следующий вывод:

for (i in num_times)  
  print(months2014[1:i])

[1] "07" "08" "09" "10" "11" "12"
[1] "07" "08" "09" "10" "11" "12"
[1] "07" "08" "09" "10" "11" "12"
[1] "07" "08" "09" "10" "11" "12"
[1] "07" "08" "09" "10" "11" ## repeated upto the 5th element
[1] "07" "08" "09" "10" "11" "12"
[1] "07" "08" "09" "10" "11" "12"
[1] "07" "08" "09" "10" "11" ## repeated up to the 6th element

Если вы посмотрите на вектор num_times, он также имеет 12. Из-за этого я также получаю этот результат:

[1] "07" "08" "09" "10" "11" "12" NA   NA   NA   NA   NA   NA

В months2014 всего 6 элементов, поэтому я получаю NA. Я действительно хочу, чтобы он перезапустился и получил вывод следующим образом:

[1] "07" "08" "09" "10" "11" "12" "07   "08" "09"   "10"   "11"   "12"

У меня три вопроса:

1) Как сохранить вывод цикла? Я попытался создать пустой вектор и поместить в него результаты, но это не сработало:

temp_vec <- c()
for (i in num_times)  
  temp_vec <- print(months2014[1:i])

2) Как исправить АН?

3) Должен ли быть лучший способ сделать это?


person vagabond    schedule 07.10.2016    source источник
comment
Возможно sapply(num_times,function(x) rep(months2014,length.out=x))   -  person Haboryme    schedule 07.10.2016


Ответы (1)


После тестирования это работает:

sapply(num_times,function(x) rep(months2014,length.out=x)

Он выводит список и повторяет последовательность, если значение в num_times больше, чем длина months214:

[[1]]
[1] "07" "08" "09" "10" "11" "12"

[[2]]
[1] "07" "08" "09" "10" "11" "12"

[[3]]
[1] "07" "08" "09" "10" "11" "12"

[[4]]
[1] "07" "08" "09" "10" "11" "12"

[[5]]
[1] "07" "08" "09" "10" "11"

[[6]]
 [1] "07" "08" "09" "10" "11" "12" "07" "08" "09" "10" "11" "12"
person Haboryme    schedule 07.10.2016
comment
который охватывает все - удаление NA, использование apply вместо loop . Благодарность ! Я просто добавил c(unlist(sapply(num_times,function(x) rep(months2014,length.out=x)), чтобы преобразовать его в символ - person vagabond; 07.10.2016
comment
Если OP требуется векторный вывод, другой вариант — months2014[sequence(num_times)] - person akrun; 08.10.2016