【问题标题】:How to test vector equality in R?如何在 R 中测试向量相等性?
【发布时间】:2015-10-07 19:39:40
【问题描述】:

假设我想测试一个向量是否只有三个元素(0、1 和 NA)。如何?假设我在下面有向量“blarg”。

如何测试另一个向量“foo”是否完全具有“blarg”的元素(但不考虑顺序)?

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

哎呀,这会返回一个向量:

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

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

if (max(c(foo, 2) %in% blarg)) { print("ok") }
"ok"

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

【问题讨论】:

  • 您的问题中没有列表。你的意思是vector?您也没有定义所有变量。 blarg 是什么?
  • 你听说过MWE吗?
  • @PierreLafortune 是的,所以我定义了 blarg。

标签: r


【解决方案1】:

这是我对 OP 的猜测:

blarg = c(0,1,NA)

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

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

【讨论】:

    【解决方案2】:

    一种选择是使用all(不是我在这里颠倒顺序):

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

    另一种选择:

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

    编辑:

    如果你有一个列表,你应该在应用这个解决方案之前unlist

    【讨论】:

    • 谢谢!这似乎不起作用,“all(blarg %in% c(0, 1, NA, 2))”返回 TRUE。我想我可以加上 "&& length(blarg) == 3"。
    • @dfrankow 真的吗?你在这儿叫什么?
    • 我刚刚在上面定义了 blarg。我想测试向量相等,两边是相同的值。
    猜你喜欢
    • 1970-01-01
    • 2011-05-17
    • 2010-11-28
    • 2016-10-02
    • 1970-01-01
    • 2011-02-01
    • 2021-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多