R 中 %in% 的否定
Negation of %in% in R
R 中是否有 %in%
的简短否定,例如 !%in%
或 %!in%
?
当然我可以用!(c("A", "B") %in% c("B", "C"))
否定c("A", "B") %in% c("B", "C")
(参见this question),但我更喜欢更直接的方法并省去一对括号(大概大多数人都这样)更喜欢 c("A", "B") != c("B", "C")
而不是 !(c("A", "B") == c("B", "C"))
).
实际上你不需要额外的括号,!c("A", "B") %in% c("B", "C")
有效。
如果您喜欢更易读的内容,请自行定义:
"%nin%" <- function(x, table) match(x, table, nomatch = 0L) == 0L
这样做的好处是不浪费精力 -- 我们不会得到结果然后取反,我们直接得到结果。 (差异通常应该是微不足道的)
您随时可以创建一个:
> `%out%` <- function(a,b) ! a %in% b
> 1:10 %out% 5:15
[1] TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
另外还有一个与setdiff
有点相似的函数,returnsa
的唯一个元素不在b
:
> setdiff(1:10,5:15)
[1] 1 2 3 4
> setdiff(5:15,1:10)
[1] 11 12 13 14 15
不,没有内置函数可以执行此操作,但您可以使用
轻松自己编写代码
`%nin%` = Negate(`%in%`)
或
`%!in%` = Negate(`%in%`)
查看此主题和后续讨论:%in% operator - NOT IN (alternatively here)
此外,有人指出包 Hmisc
包含运算符 %nin%
,因此如果您将它用于您的应用程序,它已经存在。
library(Hmisc)
"A" %nin% "B"
#[1] TRUE
"A" %nin% "A"
#FALSE
%!in%
功能现已在 library(operators)
中可用
R 中是否有 %in%
的简短否定,例如 !%in%
或 %!in%
?
当然我可以用!(c("A", "B") %in% c("B", "C"))
否定c("A", "B") %in% c("B", "C")
(参见this question),但我更喜欢更直接的方法并省去一对括号(大概大多数人都这样)更喜欢 c("A", "B") != c("B", "C")
而不是 !(c("A", "B") == c("B", "C"))
).
实际上你不需要额外的括号,!c("A", "B") %in% c("B", "C")
有效。
如果您喜欢更易读的内容,请自行定义:
"%nin%" <- function(x, table) match(x, table, nomatch = 0L) == 0L
这样做的好处是不浪费精力 -- 我们不会得到结果然后取反,我们直接得到结果。 (差异通常应该是微不足道的)
您随时可以创建一个:
> `%out%` <- function(a,b) ! a %in% b
> 1:10 %out% 5:15
[1] TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
另外还有一个与setdiff
有点相似的函数,returnsa
的唯一个元素不在b
:
> setdiff(1:10,5:15)
[1] 1 2 3 4
> setdiff(5:15,1:10)
[1] 11 12 13 14 15
不,没有内置函数可以执行此操作,但您可以使用
轻松自己编写代码`%nin%` = Negate(`%in%`)
或
`%!in%` = Negate(`%in%`)
查看此主题和后续讨论:%in% operator - NOT IN (alternatively here)
此外,有人指出包 Hmisc
包含运算符 %nin%
,因此如果您将它用于您的应用程序,它已经存在。
library(Hmisc)
"A" %nin% "B"
#[1] TRUE
"A" %nin% "A"
#FALSE
%!in%
功能现已在 library(operators)