[英]How to use rlang operators in a package?
我正在編寫一個使用tidyverse函數的包,即使用非標准的評估,例如dplyr::filter
,例如:
setMethod("filter_by_id",
signature(x = "studies", id = "character"),
definition = function(x, id) {
study_id <- rlang::expr(study_id)
lst <- purrr::map(s4_to_list(x), ~ dplyr::filter(.x, !!study_id %in% id))
y <- list_to_s4(lst, "studies")
return(y)
})
我正在使用!!
運算符(我可能會使用rlang
包中的其他幾個),我想知道是否需要像管道運算符%>%
那樣顯式導入它,如本問題所述: R:使用magrittr管道運算符自編書包 。
有沒有相當於使用usethis::use_pipe()
東西,但對於來自rlang
的運算符?
根據哈德利的說法, !!
運算符更像是一個禮貌的虛構而不是實際的運算符,這就是為什么你不需要導入它。
到目前為止,我們表現得好像!! 和!!! 是常規前綴運算符,如+, - 和!。 他們不是。 從R的角度來看,!! 和!!! 只是重復應用!:
!!TRUE #> [1] TRUE !!!TRUE #> [1] FALSE
一旦rlang
函數檢測到這個“運算符”,它就會以不同的方式處理它以執行必要的整潔評估(這就是運算符僅在rlang
上下文中有用的rlang
)
! 和!!! 在由rlang驅動的所有引用函數中特別表現,它們的行為類似於真正的運算符,其優先級等同於一元+和 - 。
這就是為什么你只需要導入你想要的rlang
函數,因為處理的邏輯!!
位於rlang
內部,而不是像magrittr
管道那樣的單獨功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.