gpt4 book ai didi

r - 如何在包中使用 rlang 运算符?

转载 作者:行者123 更新时间:2023-12-05 00:45:52 25 4
gpt4 key购买 nike

我正在编写一个使用 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: use magrittr pipe operator in self written package .

是否有等同于 usethis::use_pipe() 的东西但对于来自 rlang 的运营商?

最佳答案

据哈德利所说,!!运算符更像是 polite fiction不是实际的运算符,这就是您不需要导入它的原因。

So far we have acted as if !! and !!! are regular prefix operators like + , -, and !. They’re not. From R’s perspective, !! and !!! are simply the repeated application of !:

!!TRUE
#> [1] TRUE
!!!TRUE
#> [1] FALSE


曾经 rlang函数检测到这个“运算符”,它会以不同的方式对待它以执行必要的整洁评估(这就是为什么运算符仅在 rlang 上下文中有用)

!! and !!! behave specially inside all quoting functions powered by rlang, where they behave like real operators with precedence equivalent to unary + and -.



这就是为什么您只需要导入 rlang你想要的函数,因为处理 !! 的逻辑位于里面 rlang内部结构,而不是像 magrittr 那样的独立函数管道。

关于r - 如何在包中使用 rlang 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55383205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com