2015-02-23 14 views
9

Alt çizgi tabanlı işlevinin group_by_() işlevi için ne olduğunu anlayamıyorum. group_by yardımı itibaren dplyr: group_by ile group_by_ işlevleri arasındaki fark nedir?

:

Source: local data frame [3 x 3] 
    cyl mean(disp) mean(hp) 
1 4 105.1364 82.63636 
2 6 183.3143 122.28571 
3 8 353.1000 209.21429 

ama bu:

"Error in as.lazy_dots(list(...)) : object 'cyl' not found" 
:

by_cyl <- group_by_(mtcars, cyl) 

bir hata verir

by_cyl <- group_by(mtcars, cyl) 
summarise(by_cyl, mean(disp), mean(hp)) 

beklenen verir

Benim sorum şu, alt çizgi versiyonu ne yapıyor? Ve ayrıca, “normal” olandan ziyade hangi durumlarda onu kullanmak isterdim?

Teşekkür

+1

başka bir değişkende 'cyl' tanımlar ve group_by_'' ile geçebileceği. 'someVar <- 'cyl'; by_cyl <- grup_by_ (mtcars, someVar) ' – akrun

+6

[Standart dışı değerlendirme] 'nin okunması (http://cran.r-project.org/web/packages/dplyr/vignettes/nse.html)' dplyr' paket vignette başlamak için iyi bir yer olurdu. – hrbrmstr

+1

'by_cyl <- group_by_ (mtcars," cyl ")' çalışması (@akrun tarafından yorumlanmıştır) –

cevap

18

dplyr Standart Dışı Değerlendirme vinyet burada yardımcı olur: Yukarıdaki bağlantı artık güncel olmakla birlikte, aynı bilgileri için github sayfasından bulunabilir: http://cran.r-project.org/web/packages/dplyr/vignettes/nse.html

Not paketi. https://github.com/tidyverse/dplyr/blob/34423af89703b0772d59edcd0f3485295b629ab0/vignettes/nse.Rmd

Dplyr uses non-standard evaluation (NSE) in all of the most important single table verbs: filter(), mutate(), summarise(), arrange(), select() and group_by(). NSE is important not only to save you typing, but for database backends, is what makes it possible to translate your R code to SQL. However, while NSE is great for interactive use it’s hard to program with. This vignette describes how you can opt out of NSE in dplyr, and instead rely only on SE (along with a little quoting).

...

Every function in dplyr that uses NSE also has a version that uses SE. There’s a consistent naming scheme: the SE is the NSE name with _ on the end. For example, the SE version of summarise() is summarise_(), the SE version of arrange() is arrange_(). These functions work very similarly to their NSE cousins, but the inputs must be “quoted”

+0

Bağlantı bozuk – val

+2

Bir python kullanıcısı olarak, R'de kod yazmak için tüm bu cevapları okumak beni oldukça karıştırıyor. R programcıları neden StackOverflow 'da yapılır 1. Açık örneklerle açıklanamaz (python cevaplarında çok fazla görülür). 2. Basit şartlarda kod açıklamak yerine belgelere bağlantılar verin. Bunu çok gördüm. Bu trendi neden gördüğümü bilen var mı? Bazı R kullanıcılarının iyi yöntemleri takip etmeye çalıştığını görüyorum, ancak StackOverflow'ta karşılaştığım ana soruların ve cevapların sadece% 1-2'sini kapsamaktadır. teşekkürler. – nikpod

İlgili konular