如何在R中的循环中将元素添加到列表的末尾?

3
我有一个向量名为: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个回答

3
我们可以在不使用循环的情况下使用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)

3
我们可以使用 mapply
unlist(mapply(rep, c(1,2,3), c(3,3,4))

# [1] 1 1 1 2 2 2 3 3 3 3

1
我没有C(1,2,3),每次都不同,这只是一个例子。谢谢。 - Soma
@ssssoooo 没关系,你可以这样使用它:unlist(mapply(rep, seq_along(block_sizes), block_sizes) 或者 unlist(mapply(rep, vector_of_items_to_be_repated, block_sizes) - M--
1
是的,这是真的,我不知道我们有这个seq_along()函数。谢谢。 - Soma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接