#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