2016-08-02 43 views
6

Nhà điều hành đường ống %>% luôn cho ăn bên trái (LHS) vào đối số đầu tiên của bên phải (RHS)? Ngay cả khi đối số đầu tiên được xác định lại trong cuộc gọi RHS?Sử dụng đường ống mà không nạp đối số đầu tiên

Nói rằng tôi muốn để xác định các biến để sử dụng trong cor():

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

Nhưng điều này thất bại, có vẻ như nó gọi một cái gì đó giống như cor(., x=.$Sepal.Length, y=.$Sepal.Width)?

Tôi biết tôi có thể sử dụng thay vì

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

Nhưng muốn tìm một giải pháp với %>% ...

Trả lời

10

là các nhà điều hành %>% ống luôn ăn phía bên tay trái (LHS) để đối số đầu tiên của phía bên tay phải (RHS)? Ngay cả khi đối số đầu tiên được xác định lại trong cuộc gọi RHS?

số Bạn đã nhận thấy ngoại trừ bản thân: nếu phía bên tay phải sử dụng ., đối số đầu tiên của phía bên tay trái là không ăn trong Bạn cần phải vượt qua nó bằng tay..

Tuy nhiên, đây là không phải xảy ra trong trường hợp của bạn vì bạn không tự sử dụng ., bạn đang sử dụng nó bên trong một biểu thức. Để tránh phía bên tay trái được ăn như là đối số đầu tiên, bạn bổ sung cần phải sử dụng dấu ngoặc:

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

Hoặc:

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

- sau khi tất cả, đó là những gì %$% là có cho, như trái ngược đến %>%.

Nhưng so sánh:

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

Ở đây, chúng tôi đang đi qua các biểu hiện bên trái một cách rõ ràng như data lập luận để lm. Bằng cách làm như vậy, chúng tôi ngăn không cho nó được chuyển làm đối số đầu tiên cho lm.

+0

Tuyệt vời! Tôi đã mất tích cú đúp, cảm ơn lời giải thích! và xin lỗi vì lỗi đánh máy ban đầu là% $% khi tôi muốn nói%>%! – Matifou

Các vấn đề liên quan