Проверьте, являются ли два вектора подмножествами

#r #subset #vector

#r #подмножество #вектор

Вопрос:

Я пытаюсь проверить, есть ли целое число i в {1, …, M} такое, что a_i = 1 и b_i = 0, и целое число j в {1,…, M} такое, что 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] amp;amp; 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 в качестве моего вывода. Как я могу исправить свой код?

Ответ №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