只有连续数字的子集

Subset with only consecutive numbers

我想生成只有连续数字的 {1,2,3,4} 的所有子集。 (例如,我想要子集 {1}、{1,2} 或 {2,3,4} 而不是 {2,4}。)

这是我一直在尝试的:

library(ggm)
p2<-powerset(1:4, sort = TRUE, nonempty = TRUE)
m2<-p2
for (i in 1:length(p2)){
  ifelse(length(p2[[i]]) <2, m2<-m2, ifelse(max(diff(as.numeric(p2[[i]])))>1, m2<-m2[- 
c(i)],m2<-m2))
}

我想先生成{1,2,3,4}的幂集,排除数字不连续的子集。但是当我做

m2<-m2[- c(i)]

第二个 ifelse 中的命令排除数字不连续的子集,我相信我更改了幂集的索引,所以我不断得到我想要的错误子集。

有什么正确的建议吗?

谢谢!

您可以使用以下 one-liner:

获取基数 R 中 1 到 4 之间的所有唯一升序序列
apply(which(upper.tri(diag(4), TRUE), TRUE), 1, function(x) x[1]:x[2])
#> [[1]]
#> [1] 1
#> 
#> [[2]]
#> [1] 1 2
#> 
#> [[3]]
#> [1] 2
#> 
#> [[4]]
#> [1] 1 2 3
#> 
#> [[5]]
#> [1] 2 3
#> 
#> [[6]]
#> [1] 3
#> 
#> [[7]]
#> [1] 1 2 3 4
#> 
#> [[8]]
#> [1] 2 3 4
#> 
#> [[9]]
#> [1] 3 4
#> 
#> [[10]]
#> [1] 4