Rで%>%関数はどういう意味ですか?


119

dplyrrvestの%>%ようないくつかのパッケージで(パーセントよりパーセントが大きい)関数の使用を見てきました。どういう意味ですか?Rでクロージャーブロックを書く方法ですか?


10
または見る?'%>%'
jbaums 2014年

6
デビッド、ありがとう!jbaums、残念ながらこれに関する文書はありません。? '%>%'が「指定されたパッケージとライブラリに '%>%'のドキュメントがありません」
alfakini '25年

6
@alf。する必要がありますlibrary(magrittr)またはlibrary(dplyr)最初に実行して?'%>%'から、私のリンクはより多くの情報を提供します
デビッドアレンブルク


回答:


141

%...%演算子

%>%組み込みの意味はありませんが、ユーザー(またはパッケージ)は自由にフォームの演算子を自由に定義できます%whatever%。たとえば、この関数は、左側の引数とそれに続くコンマとスペースで構成される文字列を返し、次に右側の引数を返します。

"%,%" <- function(x, y) paste0(x, ", ", y)

# test run

"Hello" %,% "World"
## [1] "Hello, World"

Rのベースは、%*%(行列乗算)、 %/%(整数除算)、%in%(lhsはrhsのコンポーネントですか?)、%o%(外積)、%x%(クロネッカー積)を提供します。%%このカテゴリに該当するかどうかは不明ですが、モジュロを表します。

expm Rパッケージexpmは、行列べき乗演算子を定義し%^%ます。例については、Rの行列のべき乗を参照してください。

演算子演算子Rパッケージは、%!in%(for not %in%)などの演算子を多数定義しています。http://cran.r-project.org/web/packages/operators/operators.pdfを参照してください

パイプ

magrittr magrittrの場合、%>%Rパッケージはmagrittrビネットで説明されているようにそれを定義しています。http://cran.r-project.org/web/packages/magrittr/vignettes/magrittr.htmlを参照してください

magittrは、他にもこのような演算子をいくつか定義しています。議論以前のリンクの追加のパイプ演算子のセクションを参照してください%T>%%<>%%$%してhttp://cran.r-project.org/web/packages/magrittr/magrittr.pdfも、詳細については。

dplyr%.%同様の演算子を定義するために使用されるdplyr Rパッケージ。ただし、非推奨になり、dplyrでは、%>%magrittrからインポートしたdplyrを使用して、dplyrユーザーが利用できるようにすることをユーザーに推奨しています。David Arenburgがコメントで述べたように、このSOの質問はそれとmagrittrの違いについて説明しています%>%%。%(dplyr)と%>%(magrittr)の違い

pipeR RパッケージpipeRは、%>>%magrittrの%>%に類似した演算子を定義し、その代わりに使用できます。http://renkun.me/pipeR-tutorial/を参照してください

pipeRパッケージは、他にもこのような演算子をいくつか定義しています。参照:http : //cran.r-project.org/web/packages/pipeR/pipeR.pdf

postlogic定義されたpostlogicパッケージ%if%%unless%演算子。

wrapr Rパッケージwrapr %.>%は、明示的なバージョンのドットパイプを定義します。%>%これは、引数の暗黙的な挿入を行わず、右側のドットの明示的な使用を置き換えるだけです。これは、の別の代替案と考えることができます%>%https://winvector.github.io/wrapr/articles/dot_pipe.htmlを参照してください

ビザロパイプ。これは実際にはパイプではなく、実際にパイプを使用せずにパイプと同様の方法で機能する巧妙な基本構文です。それはhttp://www.win-vector.com/blog/2017/01/using-the-bizarro-pipe-to-debug-magrittr-pipelines-in-r/で議論されています アイデアは書く代わりにそれです:

1:8 %>% sum %>% sqrt
## [1] 6

次のように書きます。この場合、ドット引数を省略せずに明示的にドットを使用して、名前がdot(.)である変数への割り当てでパイプラインの各コンポーネントを終了します。その後にセミコロンを付けます。

1:8 ->.; sum(.) ->.; sqrt(.)
## [1] 6

更新 expmパッケージに関する情報を追加し、上部に簡略化した例を追加。postlogicパッケージを追加しました。


1
私も見ています:%<>%、%T>%、%$%、彼らは何をしますか?rpackages.ianhowson.com/cran/magrittr/man/pipe.html
16年

負荷後のRの中から使用して助けを得るmagrittr:?"%<>%"など
G.グロタンディーク

17

G.Grothendieckによって提供されリンクを読んだ後の私の理解は、%>%が関数をパイプする演算子であるということです。これにより、複数の関数がネストされている場合、逆方向に進むよりも、これらのパイプを介して複数の関数のフローをたどることが容易になるため、読みやすさと生産性が向上します。


あなたが言及した利点は、ここのコード例示されます。
クリストファーステファン

9

%>%Unixのパイプに似ています。たとえば、

a <- combined_data_set %>% group_by(Outlet_Identifier) %>% tally()

の出力combined_data_setがに入りgroup_by、その出力がに入りtally、最後の出力がに割り当てられaます。

これにより、変数を作成したり、中間値を保存したりせずに、関数を連続して簡単に使用できます。


-1

Rパッケージdplyrとsfは、Rパッケージmagrittrから演算子%>%をインポートします。

次のコマンドを使用すると、ヘルプを利用できます。

?'%>%'

もちろん、パッケージは、例えば、

library(sf)

magrittr前方パイプ演算子のドキュメントは、良い例を示しています:関数が1つの引数のみを必要とする場合、x%>%fはf(x)と同等です


1
これは、stackoverflow.com / a / 27129032/570918ですでに十分に説明されているようです。
merv
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.