%>% İşlevi R'de ne anlama geliyor?


120

Ben kullanımını gördük %>%gibi bazı paketlerde (yüzde yüzde büyüktür) fonksiyonu dplyr ve rvest . Bu ne demek? R'de kapatma blokları yazmanın bir yolu mu?


10
veya bak?'%>%'
jbaums

6
Teşekkürler David! jbaums, maalesef bununla ilgili bir belge yok. ? '%>%', "Belirtilen paketlerde ve kitaplıklarda '%>%' için belge yok"
alfakini

6
@alf. Gerekirse library(magrittr)veya library(dplyr)ilk ve ardından koşmak ?'%>%'benim link daha bilginize sunar olsa
David Arenburg

1
Ayrıca, buraya
David Arenburg

Yanıtlar:


142

% ...% operatörler

%>%yerleşik bir anlamı yoktur, ancak kullanıcı (veya bir paket) formun işleçlerini %whatever%istediği şekilde tanımlamakta özgürdür . Örneğin, bu işlev, sol bağımsız değişkenini ve ardından virgül ve boşluk içeren bir dizge ve ardından sağ bağımsız değişkenini döndürür.

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

# test run

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

R'nin tabanı %*%(matris çoğullama), %/%(tamsayı bölme), %in%(rhs'nin bir bileşeni mi?), %o%(Dış çarpım) ve %x%(kronecker çarpımı) sağlar. %%Bu kategoriye girip girmediği belli değil ama moduloyu temsil ediyor.

expm R paketi, expm, bir matris güç operatörünü tanımlar %^%. Bir örnek için bkz . R'deki Matrix gücü .

operatörler R paketi operatörleri %!in%(for not %in%) gibi çok sayıda bu tür operatörü tanımlamıştır . Bkz. Http://cran.r-project.org/web/packages/operators/operators.pdf

Borular

magrittr halinde %>%magrittr vignette'in olarak tartışıldığı gibi magrittr R paketin bunu tanımlamaktadır. Bkz. Http://cran.r-project.org/web/packages/magrittr/vignettes/magrittr.html

magittr ayrıca bir dizi başka operatörü de tanımlamıştır. Tartışır önce bağlantının Ek Boru Operatörler bölümüne bakın %T>%, %<>%ve %$%ve http://cran.r-project.org/web/packages/magrittr/magrittr.pdf Daha da ayrıntılı bilgi için.

dplyr%.% Benzer bir işleci tanımlamak için kullanılan dplyr R paketi ; ancak, kullanımdan kaldırılmıştır ve dplyr, kullanıcıların %>%magrittr'den hangi dplyr içe aktardığını ve dplyr kullanıcısının kullanımına sunmasını önermektedir. David Arenburg'un yorumlarda belirttiği gibi, bu SO sorusu onunla magrittr'ler arasındaki farkları tartışıyor %>%: %.% (Dplyr) ve%>% (magrittr) arasındaki farklar

pipeR R paketi, pipeR, %>>%magrittr'in%>% 'sine benzer bir işleci tanımlar ve buna alternatif olarak kullanılabilir. Bkz. Http://renkun.me/pipeR-tutorial/

PipeR paketi aynı zamanda bir dizi başka operatörü de tanımlamıştır. Bakınız: http://cran.r-project.org/web/packages/pipeR/pipeR.pdf

postlogic Postlogic paket tanımlanır %if%ve %unless%operatörler.

wrapr R paketi, wrapr, bağımsız değişkenlerin örtük olarak eklenmemesi, yalnızca sağ taraftaki noktanın açık kullanımlarının yerini alması %.>%açısından açık bir sürümü olan bir nokta borusunu tanımlar %>%. Bu, başka bir alternatif olarak düşünülebilir %>%. Bkz. Https://winvector.github.io/wrapr/articles/dot_pipe.html

Tuhaf boru . Bu gerçekten bir boru değil, aslında boru kullanmadan borulara benzer bir şekilde çalışmak için bazı akıllı temel sözdizimidir. Http://www.win-vector.com/blog/2017/01/using-the-bizarro-pipe-to-debug-magrittr-pipelines-in-r/ adresinde tartışılmaktadır. Fikir, yazmak yerine şudur:

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

biri aşağıdakileri yazıyor. Bu durumda nokta bağımsız değişkenini elemek yerine açıkça nokta kullanırız ve ardışık düzenin her bileşenini adı dot ( .) olan değişkene atama ile sonlandırırız . Bunu noktalı virgülle takip ediyoruz.

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

Güncelle Expm paketi hakkında bilgi eklendi ve üstte basitleştirilmiş örnek. Postolojik paket eklendi.


1
Ayrıca şunu da görüyorum:% <>%,% T>%,% $%, ne yapıyorlar? rpackages.ianhowson.com/cran/magrittr/man/pipe.html
pluke

Magrittr'i yükledikten sonra R içinden şunu kullanarak yardım alın:, ?"%<>%"vb.
G. Grothendieck


9

%>%Unix'teki boruya benzer. Örneğin,

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

çıktısı combined_data_setgirecek group_byve çıktısı girecek tally, ardından son çıktıya atanacak a.

Bu, değişkenler oluşturmadan ve ara değerleri depolamadan fonksiyonları seri olarak kullanmanın kullanışlı ve kolay bir yolunu sunar.


-1

R paketleri dplyr ve sf,%>% operatörünü R paketi magrittr'den içe aktarır.

Aşağıdaki komut kullanılarak yardım alınabilir:

?'%>%'

Elbette paket, örn. Kullanılarak yüklenmelidir.

library(sf)

Magrittr ileri boru operatörünün dokümantasyonu iyi bir örnek verir: Fonksiyonlar sadece bir argüman gerektirdiğinde, x%>% f, f (x) 'e eşdeğerdir


1
Görünüşe göre bu, stackoverflow.com/a/27129032/570918 adresinde zaten iyi açıklanmış .
merv
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.