R、 X的所有元素是否都存在于Y中

R、 X的所有元素是否都存在于Y中,r,vector,R,Vector,在R中,如何测试一个向量的元素不存在于另一个向量中 X <- c('a','b','c','d') Y <- c('b', 'e', 'a','d','c','f', 'c') X您想要setdiff: > setdiff(X, Y) # all elements present in X but not Y character(0) > length(setdiff(X, Y)) == 0 [1] TRUE 您可以在%中使用all和%来测试X的所有值是否也在Y中:

在R中,如何测试一个向量的元素不存在于另一个向量中

X <- c('a','b','c','d')
Y <- c('b', 'e', 'a','d','c','f', 'c')

X您想要
setdiff

> setdiff(X, Y) # all elements present in X but not Y
character(0)

> length(setdiff(X, Y)) == 0
[1] TRUE

您可以在%
中使用
all
%来测试
X
的所有值是否也在
Y
中:

all(X %in% Y)
#[1] TRUE

关于
setdiff
的警告:如果输入向量有重复的元素,
setdiff
将忽略重复的元素。这可能是你想要做的,也可能不是

我编写了一个包
vecsets
,下面是您将得到的不同之处。请注意,我修改了
X
以演示该行为

 library(vecsets)
 X <- c('a','b','c','d','d')
 Y <- c('b', 'e', 'a','d','c','f', 'c')
 setdiff(X,Y)
   character(0)
 vsetdiff(X,Y)
[1] "d"
库(向量集)

这很好,几乎和英语一样:-)是的,很容易理解,但请看我的答案,
vsetdiff
case@CarlWitthoft,你的答案在哪里?@初学者“耐心点,蚱蜢”:-。我在发布答案之前发布了评论-应该是可见的now@CarlWitthoft,好的,对不起-我以为你指的是一个现有的答案,也许是关于一个不同的问题。顺便说一句,回答得不错。我们应该弄清楚OP在这种情况下想要什么。卡尔·维特霍夫在他的回答中展示了这种情况下的预期行为是什么?我认为OP的问题很清楚,重复并不重要,因为他想知道“X的所有元素是否都存在于Y中”。此外,该术语意味着副本或顺序无关紧要。因此,您不应该在包/函数的名称中使用术语“set”,因为它会非常混乱。@TMS奇怪的是,我将“X的所有元素”解释为向量的每个元素,而不是简化代数集的唯一元素。尽管有混淆的风险,我还是会在函数名中使用“set”,因为我认为它是代数集运算的伴侣,而不是竞争对手。