簡體   English   中英

如何在包中使用rlang運算符?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM