2015-06-08 13 views
9

tôi đã tự hỏi làm thế nào để sử dụng hợp lý (ví dụ which, any, all) chức năng với %>% điều hành từ dplyr gói trong R. Tôi có một vector của các giá trịLàm thế nào để sử dụng chức năng logic với%>% nhà điều hành (dplyr)

aaa <- sample(1:5, 10, replace = TRUE)

Tôi muốn tìm hiểu xem số nào trong số đó bằng 4. Khi tôi cố gắng này:

aaa == 4 %>% which(.)

tôi nhận được lỗi sau:

Error in which(.) : argument to 'which' is not logical

Cùng đi với các chức năng khác mà đòi hỏi vector logic như một cuộc tranh cãi, chẳng hạn như all hoặc any.

aaa == 4 %>% any

[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE

Warning message: In any(.) : coercing argument of type 'double' to logical

+0

Phiên bản dplyr của bạn là gì? –

+2

'%>%' không phải là toán tử 'dplyr'. –

+1

Có, nhưng nó được nhập bởi 'dplyr' ... –

Trả lời

9

Tôi nghĩ rằng nó chỉ là một vấn đề khai thác được ưu tiên. Nhà điều hành %>% có độ ưu tiên thấp hơn so với các nhà khai thác khác như ==, vì vậy những gì bạn đang thực sự làm với aaa == 4 %>% which là đi qua 4 đến which chức năng ...

(aaa == 4) %>% which 

dường như chỉ làm việc tốt ...

Việc sử dụng %>% có vẻ hơi kỳ quặc/không cần thiết, nhưng có lẽ đó chỉ là vì bạn đã tách biệt nó khỏi luồng công việc của bạn để tạo ra một ví dụ tái sản xuất. Có lẽ bạn có thể nói thêm một chút về bối cảnh?

+0

Phiên bản dplyr của bạn là gì? –

+0

sử dụng phiên bản 0.4.1 –

4

Sử dụng các dấu ngoặc xung quanh các phép toán logic.

aaa <- sample(1:5, 10, replace = TRUE) 
(aaa == 4) %>% which(.) 
[1] 7 9 10 
(aaa == 4) %>% which() 
[1] 7 9 10 
(aaa == 4) %>% any() 
[1] TRUE 
Các vấn đề liên quan