как добавить в список после его последнего элемента в цикле в R? - PullRequest
1 голос
/ 21 июня 2019

У меня есть векторное имя: block_sizes=c(3,3,4), и я хочу создать список, который имеет block_sizes[1] число 1 с, block_sizes[2] число 2 с, block_sizes[3] 3 с и т. Д.

В этом примере я должен дать [3,3,4] своему коду и получить [1,1,1,2,2,2,3,3,3,3].

Я написал код ниже, но я не знаю, почему он дает мне [0,3,3,3,3]. Я думаю, это потому, что я должен был добавить к последнему элементу вектора, которым я не являюсь сейчас. Любой вклад приветствуется.

vector=0
for (i in length(block_sizes )) {
  buf=rep.int(i,times =block_sizes[i])
  membership_vector=append(vector,buf)

  }```

Ответы [ 2 ]

2 голосов
/ 21 июня 2019

Мы можем использовать mapply:

unlist(mapply(rep, c(1,2,3), c(3,3,4))

# [1] 1 1 1 2 2 2 3 3 3 3
2 голосов
/ 21 июня 2019

Мы можем использовать rep без какого-либо цикла, поскольку параметр times векторизован

rep(seq_along(block_sizes), block_sizes)
#[1] 1 1 1 2 2 2 3 3 3 3

Или для более быстрой реализации

rep.int(seq_along(block_sizes), times = block_sizes)
#[1] 1 1 1 2 2 2 3 3 3 3

Или, если нам нужноцикл

v1 <- c()
for(i in seq_along(block_sizes)) {
   v1 <- c(v1, rep.int(i, times = block_sizes[i]))
 }

данные

block_sizes <- c(3, 3, 4)
...