假设我想测试一个向量是否只有三个元素(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在...和..”,但这看起来很难看。
你说什么?
答案 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
。