web-dev-qa-db-ja.com

Rの%in%の否定

_%in%_や_!%in%_のようなRの_%!in%_の短い否定はありますか?


もちろん、c("A", "B") %in% c("B", "C")!(c("A", "B") %in% c("B", "C"))で無効にすることもできます(cf. this question )が、もっと好きですまっすぐ進むアプローチとブラケットのペアを保存します(おそらくほとんどの人はc("A", "B") != c("B", "C")よりも!(c("A", "B") == c("B", "C"))を好むでしょう)。

21
Qaswed

いいえ、それを行うための組み込み関数はありませんが、簡単に自分でコーディングすることができます

`%nin%` = Negate(`%in%`)

または

`%!in%` = Negate(`%in%`)

このスレッドとフォローアップの説明を参照してください: %in%operator-NOT IN


また、パッケージHmiscには演算子%nin%が含まれていることが指摘されているため、アプリケーションで使用している場合は既に存在しています。

library(Hmisc)
"A" %nin% "B"
#[1] TRUE
"A" %nin% "A"
#FALSE
37

いつでも作成できます:

> `%out%` <- function(a,b) ! a %in% b

> 1:10 %out% 5:15
[1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE

それ以外の場合、setdiffに似た関数があり、aにないbの-​​nique要素を返します。

> setdiff(1:10,5:15)
[1] 1 2 3 4
> setdiff(5:15,1:10)
[1] 11 12 13 14 15
6
plannapus

実際、余分な括弧は必要ありません。!c("A", "B") %in% c("B", "C")は機能します。

読みやすいものが必要な場合は、自分で定義するだけです。

"%nin%" <- function(x, table) match(x, table, nomatch = 0L) == 0L

これには、労力を無駄にしないという利点があります。結果を取得してから無効にするのではなく、結果を直接取得するだけです。 (違いは一般に些細なはずです)

5
MichaelChirico

_%!in%_関数がlibrary(operators)で利用可能になりました