我有一个从0(开始)到5(最后一天)编号的天数我想创建一个重复N次的列表,其中N是总天数,在这种情况下是6天(0 ,1,2,3,4,5),每次连续重复都应该将向量的长度减少1。
所以输出应该是:
0 1 2 3 4 5 0 1 2 3 4 0 1 2 3 0 1 2 0 1 0
我试过了
for(i in 5:0){
i<-seq(from=0,to=i,by=1)
print(i)
}
打印出正确的输出:
0 1 2 3 4 5
0 1 2 3 4
0 1 2 3
0 1 2
0 1
0
如何将每次迭代的输出写入向量?我尝试将listItems变量指定为0并使用listItems [i]&lt; - seq代码,但它只返回for循环序列中0的最后一个值。
我想我错过了一些非常简单的东西(像往常一样)
答案 0 :(得分:1)
我们可以使用sequence
sequence(6:1)-1
#[1] 0 1 2 3 4 5 0 1 2 3 4 0 1 2 3 0 1 2 0 1 0
答案 1 :(得分:1)
最抽象的方法如下:
days <- 0:5
days_decrement <- lapply(rev(seq_along(days)), head, x=days)
days_decrement
# [[1]]
# [1] 0 1 2 3 4 5
#
# [[2]]
# [1] 0 1 2 3 4
#
# [[3]]
# [1] 0 1 2 3
#
# [[4]]
# [1] 0 1 2
#
# [[5]]
# [1] 0 1
#
# [[6]]
# [1] 0
rev(seq_along(days)
创建每个迭代的最后一个索引的向量,然后lapply
用head
迭代它以提取所需数量的第一个元素。可以通过i
访问号码days_decrement[[i]]
的迭代。
这种方法很通用,可以在数据存储在行中时处理数据框和矩阵(尽管rev(seq_along(days)
应该更改为rev(seq_len(nrow(days)))
)。
答案 2 :(得分:0)
一个向量每个条目只能有一个元素,如果你想将向量分配给一个条目,我建议使用一个列表。
一种方法看起来像这样:
retList <- list()
for (i in 5:0) {
res <- 0:i
retList <- append(retList, list(res))
}
retList
# [[1]]
# [1] 0 1 2 3 4 5
#
# [[2]]
# [1] 0 1 2 3 4
#
# [[3]]
# [1] 0 1 2 3
#
# [[4]]
# [1] 0 1 2
#
# [[5]]
# [1] 0 1
#
# [[6]]
# [1] 0
# or access a part
retList[[2]]
# [1] 0 1 2 3 4
这会给你你想要的吗?
答案 3 :(得分:0)
我认为这样可以解决问题......
unlist(lapply(5:0, seq, from = 0))
本质上,这使用lapply()
将c(5,4,3,2,1,0)
的每个值传递给to
的{{1}}参数,同时将seq()
参数常量保持为0 。结果列在一个列表中,因此from
。