【问题标题】:Check whether two vectors are subsets检查两个向量是否是子集
【发布时间】:2020-12-18 19:21:30
【问题描述】:

我正在尝试检查 {1,...,M} 中是否存在整数 i 使得 a_i = 1 和 b_i = 0 以及 {1,...,M} 中是否存在整数 j 使得 b_j = 1 和 a_j = 0。如果成立,则输出 1(无法比较);否则,输出 0(它们具有可比性)。

我试过这个:

a<-c(1,0,1,0)
b<-c(1,0,0,1)
M<-length(a)
incomparable<-function(M, a, b)
{
  for(i in 1:M){
    for(j in 1:M){
    if(a[i]!=b[i] && b[j]!=a[j]) {
      print (1)
    }
    else {
      print(0)
      }
    }
  }
}
incomparable(M,a,b)

> incomparable(M,a,b)
[1] 0
[1] 0
[1] 0
[1] 0
[1] 0
[1] 0
[1] 0
[1] 0
[1] 0
[1] 0
[1] 1
[1] 1
[1] 0
[1] 0
[1] 1
[1] 1

我需要的只是 0 或 1 作为我的输出。如何修复我的代码?

【问题讨论】:

    标签: r subset vector


    【解决方案1】:

    我相信这适用于您描述的条件。

    
    incomparable <- function(a,b){
    cond1 <- sum(a>b) > 0 # Returns true is if there is at least one case such that a_i is 1 and b_i is 0
    cond2 <- sum(b>a) > 0 # True if at least one case such that one case with b_i is 1 and a_i is 0
      cond1*cond2
    }
    
    ##### Check a case where they are incomparable vectors
    
    a<-c(1,0,0,1,0,0,1,0)
    b<-c(1,0,0,1,1,0,0,0)
    
    incomparable(a,b)
    [1] 1
    
    ##### Check case where a = b
    a<-c(1,0,0,1)
    b<-c(1,0,0,1)
    incomparable(a,b)
    [1] 0
    
    #### Case where a \subset b
    a<-c(1,0,0,0,1,0,1)
    b<-c(1,0,0,1,1,0,1)
    
    incomparable(a,b)
    [1] 0
    
    ### Case where b \subset a
    a<-c(1,1,1,0,1,0)
    b<-c(1,1,0,0,1,0)
    
    incomparable(a,b)
    [1] 0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多