只有连续数字的子集
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
我想生成只有连续数字的 {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