Vâng, các nhà điều hành %>%
được vay từ gói magrittr
trong đó xác định following rules:
- Theo mặc định, phía bên tay trái (LHS) sẽ được cấp nước tập trung tại như là đối số đầu tiên của hàm xuất hiện trên phía bên tay phải (RHS).
- Khi cần có LHS ở vị trí khác với vị trí đầu tiên, người ta có thể sử dụng dấu chấm, '.', Làm trình giữ chỗ.
Bạn có thể thấy rằng các khung dữ liệu toàn bộ vẫn đang được thông qua tại như các tham số đầu tiên với ví dụ này
f<-function(...) str(list(...))
dat %>% f(.$b)
# $ :'data.frame': 5 obs. of 2 variables:
# ..$ a: int [1:5] 1 2 3 4 5
# ..$ b: logi [1:5] TRUE TRUE TRUE TRUE TRUE
# $ : logi [1:5] TRUE TRUE TRUE TRUE TRUE
Vì vậy, bạn đang nhận được cả hai data.frame và vector (hàm được nhận hai tham số). Tôi tin rằng điều này là bởi vì bạn không di chuyển các .
đến một vị trí khác với tham số đầu tiên, do đó bạn không thay đổi hành vi để vượt qua dọc theo đối tượng như tham số đầu tiên.
Nó chỉ xảy ra khi gói magrittr
có toán tử khác để sử dụng trong các trường hợp như thế này. Bạn có thể sử dụng %$%
.
library(magrittr)
dat %$% all(b)
# [1] TRUE
Câu trả lời hay. Tôi đã ấn tượng rằng khi bạn gõ '.' nó không đẩy' .' về phía trước một lần nữa. Rõ ràng là tôi đã sai. –