如何在R中测试向量相等?

时间:2015-10-07 19:39:40

标签: r

假设我想测试一个向量是否只有三个元素(0,1和NA)。怎么样?假设我有下面的矢量“blarg”。如何测试另一个向量“foo”是否具有blarg的元素(但不考虑顺序)?

> blarg <- c(0, 1, NA)
> blarg
[1]  0  1 NA
> str(blarg)
num [1:3] 0 1 NA

糟糕,这会返回一个列表:

> c(0, 1, NA) %in% blarg
[1] TRUE TRUE TRUE

这个测试做了一些事情,但这是错误的:

if (max(c(0, 1, NA, 2) %in% blarg)) { print("ok") }
"ok"

谷歌搜索这些东西很难。

我可以做“如果0在......和1在...和..”,但这看起来很难看。

你说什么?

2 个答案:

答案 0 :(得分:2)

这是我对OP所追求的猜测:

blarg = c(0,1,NA)

setequal(blarg, c(0,1,NA))   # TRUE
setequal(blarg, c(0,1,2,NA)) # FALSE

如果您不仅关心值匹配,还关注位置,请使用all.equal

答案 1 :(得分:1)

一种选择是使用all(不是我在这里颠倒了订单):

all(blarg %in% c(0, 1, NA))

另一种选择:

unique(balrg)  %in%  c(0, 1, NA)

编辑:

如果您有列表,则在应用此解决方案之前应unlist