R 在不调用库的情况下使用 %within% 运算符(lubridate)

R use %within% operator without calling library(lubridate)

我正在编写一个使用一些 lubridate 函数的函数。

但是,我不确定如何从 lubridate 导入函数 %within%。通常这很容易,因为我只使用 lubridate::function。当我尝试使用 %within% 运算符时,这不起作用。有什么方法可以在不加载整个包本身的情况下使用包中的运算符吗?

是的。这里的问题是 %within% 是一个特殊符号,也是一个函数。在 R 中,几乎一切都是函数。例如,当您执行 2 + 2 时,R 实际上将其解释为

`+`(2, 2)

查看 Hadley Wickham 的 this section from "Advanced R" 以了解此详细信息。

因此,对您的问题最直接的回答是:对 %within% 函数使用相同的逻辑,但转义 % 符号并直接为函数指定参数 a 和 b。

lubridate::`%within%`(a, b)

如果您自己开发包,您可以使用 roxygen2 记录使用 %within% 的函数。您需要做的就是:

#' @title Your Nice Function
#' @description This is a description...
#' @param a Your first param
#' @param b Your second param
#' @importFrom lubridate \%within\%
your_nice_function <- function(a, b) {
...
}

就是这样,因为你是说这个函数从 lubridate 导入特定函数 %within%,而不加载整个 lubridate 包。

但是,如果您只想以最“熟悉”的方式使用脚本中的函数,也许最好的方法是:

`%within%` <- lubridate::`%within%`

这样做实际上是将函数复制到同名的局部变量。