2016-07-03 2 views
10

:더하기 기호 (R) 나는이 예를 얻으려고

ggplot (MPG, AES (DISPL, 하이웨이)) + geom_point을() 누군가이 2 가지 기능 사이에서 무슨 일이 일어나는지 설명해 주시겠습니까?

ggplot2에 "plus"연산자가 과부하가 걸립니까? 이 2 개를 요약 한 결과는 무엇이며 할당 된 대상은 무엇입니까? R 특정 기능 또는 ggplot2 특정 기능입니까? 그것은 일종의 파이프입니까?

+9

찾기가 쉽지 않지만'help ("+ .gg")'는 원하는 정보를 가지고 있습니다. ggplot2가로드 된'methods ("+")'를 사용하여'+ .gg'가 존재한다는 것을 알게되었습니다. –

+6

예, 아니오; 그것은 실제로 파이프입니다 (해들리가 ggplot2 이후 magrittr를 발견 했음). ggplot을 지금 변경하기에는 너무 늦었다 고 말했지만 실제로는 호출이 완료 될 때까지 플롯되지 않은 ggplot 객체에 추가됩니다. 그래서 네, 함수 사이에'data' 매개 변수를 전달하는 것으로 생각할 수 있지만, 그것을 첨가물이라고 생각하는 것이 더 유용합니다. 'ggplot_build'에 줄을 써서 객체가 무엇인지 안에 대한 아이디어를 얻으십시오. – alistaire

+0

설명을 주셔서 감사합니다! – mimic

답변

3

@Richard Scriven이 주석에서 참조하는 함수 정의는 plot-construction.r에 정의되어있어 명확하게 나타낼 수 있습니다. 호출의 LHS가 theme 또는 ggplot 개체이든 상관없이 두 가지 (unexported) 함수가 수행하는 작업을 정확히 알기 위해서는 소스를 거쳐야합니다.하지만이 이름을 사용하면 꽤 좋은 아이디어를 얻을 수 있습니다. 반환 값은 e1이고 "추가"는 e2입니다.

"+.gg" <- function(e1, e2) { 
    # Get the name of what was passed in as e2, and pass along so that it 
    # can be displayed in error messages 
    e2name <- deparse(substitute(e2)) 

    if  (is.theme(e1)) add_theme(e1, e2, e2name) 
    else if (is.ggplot(e1)) add_ggplot(e1, e2, e2name) 
} 

그래서, 그래, +gg (모든 ggplot2 객체) 클래스를 상속하는 개체에 대한 오버로드됩니다.

'파이프'(@ alistaire의 의견)는 오도 된 유추라고 생각합니다. 이것은 표준 작전 그룹 제네릭의 스타일과 매우 흡사합니다.

관련 문제