在R中生成具有与条目号相关的模式的列表

Ton*_*oni 4 r list

是否有一种聪明的方法可以使用或许使用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零,三,六,九等:的

lmo*_*lmo 7

基础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的数量增加.