Apa arti fungsi%>% di R?

119

Saya telah melihat penggunaan fungsi %>%(persen lebih besar dari persen) di beberapa paket seperti dplyr dan rvest . Apa artinya? Apakah ini cara untuk menulis blok penutupan di R?

Alfakini
sumber
10
atau lihat?'%>%'
jbaums
6
Terima kasih David! jbaums, sayangnya tidak ada dok tentang ini. ? '%>%' retuns "Tidak ada dokumentasi untuk '%>%' dalam paket dan pustaka tertentu"
alfakini
6
@alf. Anda perlu library(magrittr)atau library(dplyr)terlebih dahulu dan kemudian menjalankan ?'%>%', meskipun tautan saya memberikan lebih banyak informasi
David Arenburg
1
Juga, lihat di sini
David Arenburg
1
Terkait: Apa arti%>% di R
Joshua Ulrich

Jawaban:

141

% ...% operator

%>%tidak memiliki arti bawaan tetapi pengguna (atau paket) bebas untuk menentukan operator formulir %whatever%dengan cara apa pun yang mereka suka. Misalnya, fungsi ini akan mengembalikan string yang terdiri dari argumen kirinya diikuti dengan koma dan spasi dan kemudian argumen kanannya.

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

# test run

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

Basis dari R menyediakan %*%(mulitiplikasi matriks), %/%(pembagian integer), %in%(apakah lhs merupakan komponen dari rhs?), (Perkalian %o%luar) dan %x%(perkalian kronecker). Tidak jelas apakah %%termasuk dalam kategori ini atau tidak, tetapi ini mewakili modulo.

expm Paket R, expm, mendefinisikan operator daya matriks %^%. Untuk contoh lihat kekuatan Matrix di R .

operator Paket operator R telah mendefinisikan sejumlah besar operator seperti %!in%(untuk tidak %in%). Lihat http://cran.r-project.org/web/packages/operators/operators.pdf

Pipa

magrittr Dalam kasus %>%paket magrittr R telah mendefinisikannya seperti yang dibahas dalam sketsa magrittr. Lihat http://cran.r-project.org/web/packages/magrittr/vignettes/magrittr.html

magittr juga telah menetapkan sejumlah operator serupa lainnya. Lihat bagian Operator Pipa Tambahan dari tautan sebelumnya yang membahas %T>%, %<>%dan %$%dan http://cran.r-project.org/web/packages/magrittr/magrittr.pdf untuk lebih jelasnya.

dplyr Paket dplyr R digunakan untuk mendefinisikan %.%operator yang serupa; Namun, ini sudah tidak digunakan lagi dan sekarang dplyr merekomendasikan agar pengguna menggunakan %>%dplyr yang diimpor dari magrittr dan membuatnya tersedia untuk pengguna dplyr. Seperti yang disebutkan David Arenburg dalam komentar, pertanyaan SO ini membahas perbedaan antara itu dan magrittr %>%: Perbedaan antara%.% (Dplyr) dan%>% (magrittr)

pipeR Paket R, pipeR, mendefinisikan %>>%operator yang mirip dengan%>% magrittr dan dapat digunakan sebagai alternatif untuk itu. Lihat http://renkun.me/pipeR-tutorial/

Paket pipeR juga telah menentukan sejumlah operator serupa lainnya. Lihat: http://cran.r-project.org/web/packages/pipeR/pipeR.pdf

postlogic Paket postlogic ditentukan %if%dan %unless%operator.

wrapr Paket R, wrapr, mendefinisikan pipa titik %.>%yang merupakan versi eksplisit %>%yang tidak melakukan penyisipan argumen implisit tetapi hanya menggantikan penggunaan titik secara eksplisit di sisi kanan. Ini dapat dianggap sebagai alternatif lain untuk %>%. Lihat https://winvector.github.io/wrapr/articles/dot_pipe.html

Pipa Bizarro . Ini sebenarnya bukan sebuah pipa melainkan beberapa sintaks dasar yang cerdas untuk bekerja dengan cara yang mirip dengan pipa tanpa benar-benar menggunakan pipa. Ini dibahas di http://www.win-vector.com/blog/2017/01/using-the-bizarro-pipe-to-debug-magrittr-pipelines-in-r/ Idenya adalah bahwa alih-alih menulis:

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

salah satunya menulis sebagai berikut. Dalam hal ini kami secara eksplisit menggunakan titik daripada menghilangkan argumen titik dan mengakhiri setiap komponen pipa dengan tugas ke variabel yang namanya titik ( .). Kami mengikuti itu dengan titik koma.

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

Perbarui info yang ditambahkan pada paket expm dan contoh yang disederhanakan di atas. Menambahkan paket postlogic.

G. Grothendieck
sumber
1
Saya juga melihat:% <>%,% T>%,% $%, apa yang mereka lakukan? rpackages.ianhowson.com/cran/magrittr/man/pipe.html
pluke
Dari dalam R setelah memuat magrittr dapatkan bantuan menggunakan:, ?"%<>%"dll.
G. Grothendieck
17

Pemahaman saya setelah membaca tautan yang ditawarkan oleh G.Grothendieck adalah bahwa%>% adalah operator yang berfungsi pipa. Ini membantu keterbacaan dan produktivitas karena lebih mudah mengikuti aliran beberapa fungsi melalui pipa ini daripada mundur saat beberapa fungsi disarangkan.

Francisco López-Sancho
sumber
Keuntungan yang Anda sebutkan ditunjukkan dengan contoh kode di sini .
Christopher Stephan
9

%>%mirip dengan pipa di Unix. Misalnya, di

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

keluaran dari combined_data_setakan masuk ke group_bydan keluarannya akan masuk ke tally, kemudian keluaran akhir ditugaskan ke a.

Ini memberi Anda cara praktis dan mudah untuk menggunakan fungsi dalam rangkaian tanpa membuat variabel dan menyimpan nilai antara.

RAJAT BHATHEJA
sumber
-1

Paket R dplyr dan sf mengimpor operator%>% dari magrittr paket R.

Bantuan tersedia dengan menggunakan perintah berikut:

?'%>%'

Tentu saja paket tersebut harus dimuat sebelumnya dengan menggunakan mis

library(sf)

Dokumentasi operator pipa-maju magrittr memberikan contoh yang baik: Ketika fungsi hanya membutuhkan satu argumen, x%>% f sama dengan f (x)

HKE
sumber
1
Sepertinya ini sudah dijelaskan dengan baik di stackoverflow.com/a/27129032/570918 .
merv