web-dev-qa-db-ja.com

%op%演算子の意味は何ですか?たとえば、「%in%」?

この単純な検索を試みましたが、Rのパーセント(_%_)シンボルで何も見つかりませんでした。

次のコードで_%in%_はどういう意味ですか?

time(x) %in% time(y)ここで、xyは行列です。

_%in%_および_%stuff%_パターンに従う類似の関数のヘルプを検索するにはどうすればよいですか?

関連する質問:

38

ヘルプページを見つけるには、引用符で囲みます。これらの仕事のいずれか

_> help("%in%")
> ?"%in%"
_

ヘルプページにアクセスすると、それが表示されます

「%in%」は現在定義されています

‘「%in%」<-function(x、table)match(x、table、nomatch = 0)> 0’


timeはジェネリックであるため、_X2_が何であるかを知らずにtime(X2)が返すものがわかりません。ただし、_%in%_は、左側のどの項目が右側にもあるかを示します。

_> c(1:5) %in% c(3:8)
[1] FALSE FALSE  TRUE  TRUE  TRUE
_

intersectも参照してください

_> intersect(c(1:5), c(3:8))
[1] 3 4 5
_
26
GSee

"%" does%in%演算子のコンテキストだけでなく、それ自体ですべて意味を持つため、GSeeまたはSathishの答えが十分に進んだとは思いませんでした。これは、ユーザーが新しい中置演算子を定義するためのメカニズムです。これは、%in%中置演算子またはそのより一般的なプレフィックスの祖先matchの美徳よりもはるかに一般的な問題です。 (s)um演算子を作成するのと同じくらい簡単です

 `%s%` <- function(x,y) x + y

または、2番目の微分演算子を作成すると言うと、もっと面白いかもしれません。

 `%DD%` <- function(expr, nam="x") { D(D( bquote(.(expr)), nam), nam) }
 expression(x^4) %DD% "x"
 # 4 * (3 * x^2)

%文字は、日付、日付時刻、およびstrptimeformatCsprintfなどのCタイプのフォーマット関数の解析にも重要です。

それが最初に書かれたので、%-側面演算子のさらに別の使用法を示すmagrittr精緻化を伴うdplyrパッケージの出現を見てきました。

したがって、最も一般的な答えは、%シンボルがRパーサーによって特別に処理されるということです。パーサーはplotmath式の処理に使用されるため、?plotmathヘルプページでグラフィックアノテーションの広範なオプションも表示されます。

50
42-

%op%は、中置記号二項演算子を表します。 %を使用する組み込み演算子がいくつかあり、独自の演算子を作成することもできます。

(単一の%記号はRのキーワードではありません。キーワードのリストは ?Reserved ヘルプページで確認できます。)


二項演算子のヘルプはどのように入手できますか?

標準の変数名ではないものと同様に、用語を引用符または逆引用符で囲む必要があります。

?"%in%"
?`%in%`    

クレジット: GSeeの答え


%in%は何をしますか?

?`%in%`ヘルプページ(?matchは実際にはmatchの挿入バージョンにすぎないため、実際には%in%ヘルプページに記載されています)

[%in%]は、左オペランドに一致するかどうかを示す論理ベクトルを返します

カテゴリ変数で最も一般的に使用されますが、数値でも使用できます。

c("a", "A") %in% letters
## [1]  TRUE FALSE

1:4 %in% c(2, 3, 5, 7, 11)
## [1] FALSE  TRUE  TRUE FALSE

クレジット: GSee's answerAri's answerSathish's answer .


独自のインフィックス二項演算子を作成するにはどうすればよいですか?

これらは関数であり、他の関数と同じ方法で定義できますが、いくつかの制限があります。

  1. これはbinary演算子なので、関数は正確に2つの引数を取る必要があります。
  2. 名前は非標準であるため、引用符または逆引用符で囲む必要があります。

たとえば、これは行列のべき乗演算子を定義します。

`%^%` <- function(x, y) matrixcalc::matrix.power(x, y)

matrix(1:4, 2) %^% 3

クレジット: BondedDust's answerAri's answer


他にどのような%演算子がありますか?

Inbase R:

%/%および%%は、それぞれ 整数除算 および モジュラー除算 を実行し、 ?Arithmetic で説明されています。ヘルプページ。

%o% は、配列の 外積 を提供します。

%*%行列の乗算 を実行します。

%x% は、配列の クロネッカー積 を実行します。

Inggplot2

%+% は、ggplotのデータフレームを置き換えます。

%+replace%は、ggplotのテーマ要素を変更します。

%inside%(内部)は、範囲内の値をチェックします。

%||%(内部)は、NULL値の場合のデフォルト値を提供します。この関数は、devtools、reshape2、roxygen2、knitrの内部にも現れます。 (knitrでは%n%と呼ばれます。)

Inmagrittr

%>%は、左側を右側の式にパイプします。

%<>%は、左側を右側の式にパイプし、結果を左側のオブジェクトに割り当てます。

%T>%は、左側を右側の式にパイプします。これは、副作用のみに使用し、左側を返します。

%,%は、機能シーケンスを構築します。

%$%は、data.frameの列またはリストのメンバーを公開します。

Indata.table:

%between% 範囲内の値をチェックします。

%chin%%in%に似ており、文字ベクトル用に最適化されています。

%like% 正規表現の一致をチェックします。

InHmisc:

%nin%は、%in%の反対を返します。

devtools

%:::%(内部)は、文字列として渡されたネームスペースから変数を取得します。

Insp

%over% は空間結合を実行します(たとえば、どのポリゴンがいくつかのポイントに対応するか?)

Inrebus

%R%は、regexオブジェクトの要素を連結します。


より一般的には、以下を使用して、マシンにインストールされているすべてのパッケージ内のすべてのオペレーターを見つけることができます。

library(magrittr)

ip <- installed.packages() %>% rownames
(ops <- setNames(ip, ip) %>% 
  lapply(
    function(pkg)
    {
      rdx_file <- system.file("R", paste0(pkg, ".rdx"), package = pkg)
      if(file.exists(rdx_file))
      {
        rdx <- readRDS(rdx_file)
        fn_names <- names(rdx$variables)
        fn_names[grepl("^%", fn_names)]
      }
    }
  ) %>% 
  unlist
)
24
Richie Cotton

より一般的には、%foo%は二項演算子の構文です。 Rの2項演算子は、実際には変装した単なる関数であり、2つの引数を取ります(演算子の前と後が関数の最初の2つの引数になります)。

例えば:

> `%in%`(1:5,4:6)
[1] FALSE FALSE FALSE  TRUE  TRUE

%in%はベースRで定義されていますが、独自のバイナリ関数を定義することもできます。

`%hi%` <- function(x,y) cat(x,y,"\n")
> "oh" %hi% "my"
oh my 
21
Ari B. Friedman

%in%は、マトリックスまたはデータフレーム内で同じ名前または値の複数のオカレンスを見つけてサブセット化するために使用される演算子です。

例1:同じ名前のサブセット化

set.seed(133)
x <- runif(5)
names(x) <- letters[1:5]
x[c("a", "d")]
#  a         d 
#  0.5360112 0.4231022

ここで、「d」の名前を「a」に変更します

 names(x)[4] <- "a"

前の添え字を使用して類似の名前とその値を抽出しようとすると、機能しません。結果に注目してください。[1]と[4]の要素はありません。

x[c("a", "a")]

#        a         a 
#    0.5360112 0.5360112 

そのため、%in%二項演算子を使用して、変数の異なる位置から2つの「a」を抽出できます。

names(x) %in% "a"
#  [1]  TRUE FALSE FALSE  TRUE FALSE

#assign it to a variable called "vec"
 vec <- names(x) %in% "a"

#extract the values of two "a"s
 x[vec]
 #         a         a 
 #  0.5360112 0.4231022 

例2:列からの複数の値のサブセット化 このサイト の例を参照してください

2
Sathish