2015-02-23 19 views
9

Nie mogę dowiedzieć się, jaka jest funkcja podkreślenia dla funkcji group_by_().dplyr: jaka jest różnica między funkcjami group_by i group_by_?

Z pomocą group_by:

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

daje oczekiwany:

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 

ale tym:

by_cyl <- group_by_(mtcars, cyl) 

daje błąd:

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

Więc moje pytanie brzmi: co robi ta podkreślona wersja? A także, w jakich okolicznościach chciałbym go użyć, a nie "zwykły"?

Dzięki

+1

Można zdefiniować 'cyl' w innej zmiennej i przekazać je z' group_by_'. 'someVar <- 'cyl'; by_cyl <- group_by_ (mtcars, someVar) ' – akrun

+6

Czytanie [Ocena niestandardowa] (http://cran.r-project.org/web/packages/dplyr/vignettes/nse.html) winieta pakietowa' dplyr' byłoby dobrym miejscem do rozpoczęcia. – hrbrmstr

+1

'by_cyl <- group_by_ (mtcars," cyl ")' zadziała (jak skomentował @akrun) –

Odpowiedz

18

dplyr Non-Standard ocena winieta pomaga tutaj: http://cran.r-project.org/web/packages/dplyr/vignettes/nse.html

Uwaga: powyższy link jest już nieaktualny, ale te same informacje można znaleźć na stronie github dla osób pakiet. 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

ten link jest zepsuty – val

+2

Jako użytkownik python, przeczytanie wszystkich odpowiedzi na kodowanie w R bardzo mnie zdezorientowało. Dlaczego programiści R na StackOverflow 1. Nie wyjaśniajcie przy pomocy czystych przykładów (co widać często w odpowiedziach Pythona). 2. Podaj łącza do dokumentacji zamiast prostego wyjaśnienia kodu. Widziałem to całkiem sporo. Czy ktoś może mnie poprawić, dlaczego widzę ten trend? Widzę niektórych użytkowników R, którzy próbują stosować dobre metody, ale obejmują one tylko 1-2% głównych pytań i odpowiedzi, na które natrafiłem w StackOverflow. dzięki. – nikpod

Powiązane problemy