2015-12-03 26 views
5

Bunu çözemiyorum.Dplyr ile tümüyle ve tüm

library(dplyr) 
dat <- data.frame(a = 1:5,b = rep(TRUE,5)) 

# this doesn't work 
dat %>% all(.$b) # tricky 

# this doesn't work 
dat %>% all(b) # 

# this does 
dat %>% .$b %>% all 

çetrefilli all(.$b) çalışmıyor bulmak. Bu bana hiç de sezgisel görünmüyor.

cevap

6

O %>% operatör tanımlar magrittr paket ödünç following rules:

  1. sol taraftaki (ASÇ) görünen fonksiyonunun ilk bağımsız değişken olarak yöneltilen Varsayılan sağ taraf (RHS).
  2. LHS birinciden başka bir yere ihtiyaç duyulduğunda, yer tutucu olarak '.' Noktasını kullanabilir.
Sen bütün veri çerçevesi hala data.frame ve vektör hem alıyorsanız bu örnekte Yani

f<-function(...) str(list(...)) 
dat %>% f(.$b) 
# $ :'data.frame':  5 obs. of 2 variables: 
# ..$ a: int [1:5] 1 2 3 4 5 
# ..$ b: logi [1:5] TRUE TRUE TRUE TRUE TRUE 
# $ : logi [1:5] TRUE TRUE TRUE TRUE TRUE 

ile ilk parametre olarak aktarıldığını tespit ettik görebilirsiniz

(function alıyor iki parametre). Bunun nedeni, .'u ilk parametreden başka bir konuma taşımamanızdır, böylece davranışı nesne boyunca ilk parametre olarak değiştirmemenizdir.

magrittr paketinin böyle durumlarda kullanım için farklı bir operatöre sahip olması durumu böyle olur. %$%'u kullanabilirsiniz.

library(magrittr) 
dat %$% all(b) 
# [1] TRUE 
+0

Harika yanıt. "." Kelimesini açıkça yazdığınızda, tekrar ileriye doğru itmiyormuş izlenimi aldım. Açıkçası yanılmışım. –