我有两个向量:
a<-1:100
b<-sample(1:100,80)
我想显示 a 中未包含在 b 中的那些元素。
我努力了subset(a,a!==b)
and a[a!==b]
但这些都不起作用。我究竟做错了什么?
由于 R 中的矢量化,使用==
对于你的例子来说并不起作用。你应该使用的是setdiff
or is.element
(后者相当于%in%
).
set.seed(1)
a<-1:100
b<-sample(1:100,80)
a[!is.element(a, b)]
# [1] 8 15 33 48 52 54 56 66 68 72 74 80 90 91 92 93 94 96 98 100
setdiff(a, b)
# [1] 8 15 33 48 52 54 56 66 68 72 74 80 90 91 92 93 94 96 98 100
如果你看看如何==
当您比较两个向量时,它会起作用,它一次比较一对,并在必要时回收较短的向量。在第一个例子中x == y
,它似乎工作正常,但看看第二个例子,x == z
。这基本上是检查是否x[1] == z[1]
, x[2] == z[2]
等等,所以立刻就出现了集合的错位。
x <- 1:10
y <- 1:5
z <- c(1, 3, 5, 7, 9)
x == y
# [1] TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE
x == z
# [1] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
x %in% z
# [1] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE
用 R 语言来说,%in%
对于识别共同元素,然后用否定来否定它是非常常见的!
,但我发现setdiff
(至少在语言上)合乎逻辑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)