是否有一种聪明的方法可以使用或许使用lapply()其他更多可推断的程序来生成R中的下一个列表?
ones = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
twos = c(1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1)
threes = c(1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0)
fours = c(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0)
fives = c(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)
l = list(ones, twos, threes, fours)
[[1]]
[1] 1 1 1 1 1 1 1 1 1 1 1
[[2]]
[1] 1 0 1 0 1 0 1 0 1 0 1
[[3]]
[1] 1 0 0 1 0 0 1 0 0 1 0
[[4]]
[1] 1 0 0 0 1 0 0 0 1 0 0
Run Code Online (Sandbox Code Playgroud)
这些对应于生成分区函数的多项式系数.
第一个列表是for ones,因此计数一次是1整数; 因此向量1,1,1,1,1,1,1,...在条目中[[2]]我们有twos,并且我们2从开始计数0,跳过1(编码为0).在[[3]]我们通过计算3零,三,六,九等:的
基础R中相当简单的方法是
lapply(seq(0L, 5L), function(i) rep(c(1L, integer(i)), length.out=11L))
[[1]]
[1] 1 1 1 1 1 1 1 1 1 1 1
[[2]]
[1] 1 0 1 0 1 0 1 0 1 0 1
[[3]]
[1] 1 0 0 1 0 0 1 0 0 1 0
[[4]]
[1] 1 0 0 0 1 0 0 0 1 0 0
[[5]]
[1] 1 0 0 0 0 1 0 0 0 0 1
Run Code Online (Sandbox Code Playgroud)
seq(0L, 5L)产生向量0到5,等价seq_len(5L)-1L,这对于创建大向量更快.c(1L, integer(i))产生0-1向量的内部重复部分,rep使用length.out参数根据所需长度(此处为11)重复.lapply并且function(i)当我们遍历向量时允许0的数量增加.