2016-08-02 2 views
6

%>% 파이프 운영자는 항상 왼쪽 (LHS)을 오른쪽 (RHS)의 첫 번째 인수로 공급합니까? 첫 번째 인수가 RHS 호출에서 다시 지정되는 경우에도?첫 번째 인수를 제공하지 않고 파이프 사용

library(magrittr) 
iris %>% 
    cor(x=.$Sepal.Length, y=.$Sepal.Width) 

그러나 그것이 cor(., x=.$Sepal.Length, y=.$Sepal.Width) 같은 전화처럼 보이는, 실패

내가 cor()에서 사용할 변수를 지정하고 싶은 말은?

나는

답변

10

%>% 파이프 연산자는 항상에 왼쪽 (좌)을 먹이인가 ... 내가 대신

iris %$% 
    cor(x=Sepal.Length, y=Sepal.Width) 

사용할 수 있습니다 알고 있지만 %>%와 해결책을 찾기 위해 원 오른쪽 (RHS)의 첫 번째 인수? 첫 번째 인수가 RHS 호출에서 다시 지정되는 경우에도?

번호 당신은 예외 자신을 발견했습니다. 오른쪽이 ., 왼쪽의 첫 번째 인수를 사용하는 경우 당신은 수동으로 전달할 필요에을 공급하지 않습니다.

그러나, 이것은 당신이 그 자체로 .을 사용하지 않는 때문에 경우에 발생 하지, 당신은 표현의 내부에 그것을 사용하고 있습니다.

iris %>% {cor(x = .$Sepal.Length, y = .$Sepal.Width)} 

또는 : 첫 번째 인수로 공급되는 왼쪽을 방지하기 위해, 당신은 추가로 괄호를 사용할 필요가

iris %$% cor(x = Sepal.Length, y = Sepal.Width) 

- 결국, 그 반대 %$%가, 거기에 무엇입니다 %>%.

그러나 비교 : 여기

iris %>% lm(Sepal.Width ~ Sepal.Length, data = .) 

, 우리가 lmdata 인수로 명시 적으로 왼쪽 식을 통과하고 있습니다. 이렇게함으로써 우리는 lm에 대한 첫 번째 인수로 전달되는 것을 방지합니다.

+0

좋아요! 나는 중괄호를 놓치고 있었다, 설명에 감사드립니다! 그리고 처음에 % $ %를 언급 한 오타를 유감스럽게 생각하면서 %> %를 의미했습니다! – Matifou