首页 > 解决方案 > 编写一个 R 函数来查找二进制子集

问题描述

我有一个二进制向量 x=(1,0,0,1)。假设包含此向量自身的低阶项为 (0,0,0,0)、(0,0,0,1)、(1,0,0,0) 和 (1,0,0,1) . 我如何在 R 中找到这个低阶向量。

到目前为止我所理解的:基本上我们想要找到子集,将每个 1 替换为 0。但是要在 R 中做到这一点?我一无所知?

这是我到目前为止所尝试的。

a<-c(1,0,0,1)
M<-length(a)

for(i in 1:M){
  
  ifelse(a[i]==1, a[i]<-0, next)
  print(a)
  
  }
[1] 0 0 0 1
[1] 0 0 0 0

我要详细查找的内容:例如,我有 4 个因素 A、B、C、D。这里 (1,0,0,1) 表示 AD。

现在我想要一个 (1,0,0,1) 的子集,这意味着 AD。在我的子集中,我不能有 B 和 C。结果将是二进制形式的 {} {A} {D} {AD} (0,0,0,0), (1,0,0,0),( 0,0,0,1),(1,0,0,1)。

标签: r

解决方案


这是一种依赖于expand.grid完成繁重工作的方法:

vecs = lapply(a, seq, 0)   # keep 0s as 0, make 1s c(1, 0)
do.call(expand.grid, vecs) # generate all combinations
#   Var1 Var2 Var3 Var4
# 1    1    0    0    1
# 2    0    0    0    1
# 3    1    0    0    0
# 4    0    0    0    0

推荐阅读