Tôi đang sử dụng ifelse với đường ống trong một kịch bản mà tôi sử dụng kết quả được chuyển tiếp trong cả hai nhánh điều kiện và ifelse. Dưới đây là một phiên bản đơn giản: có vẻ như ifelse + pipe chỉ xử lý tình trạng khác nhau từ .
nếu đặt bên trong dấu ngoặc nhọn.
Lý do cho ống magrittr (%>%) với hành vi ifelse?
library("magrittr")
FALSE %>% ifelse(., 'true', 'false')
#> [1] "false"
FALSE %>% ifelse(. == TRUE, 'true', 'false')
#> Error in ifelse(., . == TRUE, "true", "false"): unused argument ("false")
FALSE %>% {ifelse(. == TRUE, 'true', 'false')}
#> [1] "false"
mục tiêu ban đầu của tôi:
library("magrittr")
NULL %>% ifelse(is.null(.), "", as.character(.))
#> Error in ifelse(., is.null(.), "", as.character(.)): unused argument (as.character(.))
NULL %>% {ifelse(is.null(.), "", as.character(.))}
#> [1] ""
Sử dụng {}
là đủ tốt cho tôi nhưng tôi muốn hiểu những lý do cho hành vi này.
Edit: Mặc dù this câu hỏi thảo luận về một chủ đề liên quan và ban đầu tôi thấy ý tưởng đưa ifelse bên trong dấu ngoặc nhọn có không có sự khác biệt giữa việc sử dụng đơn giản .
hoặc sử dụng .
trong một cuộc gọi biểu/chức năng mà là chính điểm của câu hỏi của tôi.
thể bản sao của [R Conditiona l đánh giá khi sử dụng toán tử ống%>%] (https://stackoverflow.com/questions/30604107/r-conditional-evaluation-when-using-the-pipe-operator) – mtoto