【问题标题】:Calculating Powerset in R在 R 中计算幂集
【发布时间】:2015-07-02 13:07:18
【问题描述】:

我必须设置A={1,2,3}B={a,b,c,d,e}。我想要来自AB 的元素子集,它们至少包含一个A 元素和一个B 元素。这里明确说明:Cartesian product with all elements,我需要使用以下公式:

P(A ∪ B)∖(P(A) ∪ P(B))

R,我尝试了以下查询:

require(HapEstXXR)

A <- c(1,2,3)
B <- c("A", "B", "C", "D", "E")

setdiff(powerset(union(A,B)), union(powerset(A),powerset(B)))

结果我得到了 221 个元素。据我所知,应该有(2^3-1)(2^5-1) = 217元素。

我的查询错了吗?

【问题讨论】:

    标签: r math


    【解决方案1】:
    length( s1 <- powerset(union(A,B)) ) #255
    length( s2 <- union(powerset(A),powerset(B)) ) # 38
    

    255-38 = 217,这似乎就是你要找的

    然而,并非所有 s2 都包含在 s1 中

    setdiff(s2, s1)
    # 8 sets to create.
    # 32 sets to create.
    # 256 sets to create.
    # [[1]]
    # [1] 1 2
    # 
    # [[2]]
    # [1] 1 3
    # 
    # [[3]]
    # [1] 2 3
    # 
    # [[4]]
    # [1] 1 2 3
    

    这 4 个元素解释了 221 和 217 之间的区别

    【讨论】:

    • 强制行为非常有趣,它对长度为 1 的数字向量的影响似乎与长度为 2 的数字向量不同??
    • 我认为setdiff 进行的比较必须进行一些强制。嗯,实际上我真的不知道为什么单身人士会通过。我知道1=="1" 是真的,但无法弄清楚整个谜题。
    【解决方案2】:

    不要混课:

    length( z <- setdiff(powerset(union(A,B)), union(powerset(as.character(A)),powerset(B))) ) 
    # 217
    

    注意as.character 应用于A

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-15
      • 1970-01-01
      相关资源
      最近更新 更多