web-dev-qa-db-ja.com

%>%関数はRで何を意味しますか?

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

77
alfakini

%...%演算子

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

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

# test run

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

Rのベースには、%*%(行列多重化)、%/%(整数除算)、%in%(rhsの構成要素ですか?)、%o%(外積)、および%x%(kronecker積)があります。 %%がこのカテゴリに入るかどうかは明確ではありませんが、モジュロを表します。

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

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

パイプ

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

magittrは他にもそのような演算子を定義しています。 %T>%%<>%および%$%および http://cran.r-project.org/web/packages/magrittr/magrittr.pdf について説明している前述のリンクの「追加のパイプ演算子」セクションを参照してください。 。

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

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

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

postlogicpostlogicパッケージは%if%および%unless%演算子を定義しました。

wraprRパッケージ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引数を省略するのではなく、明示的にdotを使用し、名前がdot(.)である変数への代入でパイプラインの各コンポーネントを終了します。それにセミコロンで従います。

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

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

113
G. Grothendieck

G.Grothendieckが提供しているリンク を読んだ後の私の理解は、%>%は読みやすさと生産性を向上させるために関数をパイプする演算子です。複数の関数が入れ子になっていると逆方向に移動します。

%>%は、Unixのpipeと似ています。たとえば、

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

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

これにより、変数を作成したり中間値を格納したりすることなく、関数を直列に使用する便利で簡単な方法が得られます。

4
RAJAT BHATHEJA

パイプ%>%は、パイプの直前の関数から生じるデータフレーム出力を渡して、パイプの直後の関数の最初の引数としてそれを入力します。

For Example

0
Jordan

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

次のコマンドを使用してヘルプを入手できます。

?'%>%'

もちろん、パッケージは前に例えばを使用してロードされなければなりません。

library(sf)

Magrittr順方向パイプ演算子のドキュメントにその良い例があります。関数が1つの引数のみを必要とする場合、x%>%fはf(x)と同等です。

0
HKE