如何在R中循环中的最后一个元素之后附加到列表?

Posted

技术标签:

【中文标题】如何在R中循环中的最后一个元素之后附加到列表?【英文标题】:how to append to a list after its last element in loop in R? 【发布时间】:2019-11-04 15:15:17 【问题描述】:

我有向量名称: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)

  ```

【问题讨论】:

【参考方案1】:

我们可以在没有任何循环的情况下使用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)

【讨论】:

【参考方案2】:

我们可以使用mapply:

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

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

【讨论】:

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

以上是关于如何在R中循环中的最后一个元素之后附加到列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何将元素添加到R中的列表(循环)[重复]

除了最后一个元素之后,如何在 #each 循环中的元素之间添加分隔符?

如果ArrayList的最后一个元素如何排除字符附加

附加到 Python 中的列表:每次都添加最后一个元素?

如何在不跟踪索引的情况下将元素附加到列表?

我们又来了:将一个元素附加到 R 中的列表中