2015-10-30 23 views
14

"dplyr" paketinin bir zincir operatörü vardır. Ama doğru terimin kendisinin nasıl elde edileceğiyle ilgili bir sorunum var. İlk satır ve ikinci satır kodları yanlış Neden"Dplyr" zincir operatörünü nasıl kullanabilirim?%>% Sol taraftaki kendisini R?

c(5,7,8,1) %>% sum(`[`(1:3)) # get result 27 (This is wrong) 

c(5,7,8,1) %>% sum(.[1:3]) # get result 41 (This is also wrong) 

c(5,7,8,1) %>% `[`(1:3) %>% sum() # get result 20 (This is right) 

: Örneğin

? Onlarda ne oldu?

+1

toplamına argüman olarak iletilir. İkinci durumda, biz c (5,7,8,1)%>% c (. [ 1: 3]) ' – akrun

+0

@akrun' c (5,7,8,1)%>% c (. [1: 3]) '' 5 7 8 1 5 7 8' verecektir, ancak c (5, % 7,8,1)%>%. [1: 3] '5 7 8 1' verecektir. Bu neden oluyor? – xirururu

+1

'%>%' işlevi için lhs işlevinin ilk parametresi olduğundan, çıkarılan kısım ikinci – Tensibai

cevap

16

Nokta . doğrudur.

x %>% {sum(.[1 : 3])} 

: Açıkça ayraç ifadeyi sarma bu davranışı önleyebilir

sum(x, x[1 : 3]) 

: olarak

x = c(5,7,8,1) 
x %>% sum(.[1 : 3]) 

aynı mı: Ancak %>% da ilk argüman olarak ekler Ancak, bu noktada boru hattını biraz daha fazla (kendiniz yaptığınız gibi) bölmek daha iyi olabilir:

x %>% `[`(1 : 3) %>% sum() 

Veya magrittr yardımcı işlevleri kullanarak (library(magrittr) gerektirir):

x %>% extract(1 : 3) %>% sum() 
5

dokümanını alıntı yapalım: rhs'sine ilk argüman olarak lhs Yerleştirme

% varsayılan davranışını çağrı> rhs çağrısında birden fazla argüman gerektiğinde, ilk argüman olarak lhs yerleştirmek, yani x%>% f (y) f (x, y) değerine eşdeğerdir.

Peki ne oluyor?

sum diyoruz

, böyle denir: %>% ait

n <- c(5,7,8,1) 
sum(n,n[1:3]) 

lhs ilk Özetle arg ve ikinci arg alt kümesi olarak geçirilir. Üçüncü formunuzda, yalnızca seçicinin çıkışı