我想生成{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中排除具有不连续数字的子集,我相信我改变了幂集的索引,所以我一直得到我想要的错误子集。
关于如何正确地做有什么建议吗?
谢谢!
您可以使用以下一行代码获得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