我正在编写一个使用一些lubridate函数的函数。
但是,我不确定如何%within%从 lubridate 导入该函数。通常这很容易,因为我只使用 lubridate::function 。当我使用 %within% 运算符尝试此操作时,这不起作用。有没有办法在不加载整个包的情况下使用包中的运算符?
是的。这里的问题是,这%within%是一个特殊符号,同时也是一个函数。在 R 中,几乎所有东西都是函数。例如,当您这样做时2 + 2,R 实际上将其解释为
`+`(2, 2)
Run Code Online (Sandbox Code Playgroud)
查看Hadley Wickham 的“Advanced R”中的这一部分以了解此详细信息。
因此,对您的问题最直接的答案是:对函数使用相同的逻辑%within%,但转义%符号并直接为函数指定参数 a 和 b。
lubridate::`%within%`(a, b)
Run Code Online (Sandbox Code Playgroud)
%within%如果您自己开发一个包,您可以记录使用using的函数roxygen2。您需要做的就是:
#' @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) {
...
}
Run Code Online (Sandbox Code Playgroud)
就这样了,因为你说这个函数%within%从 lubridate 导入特定的函数,而不加载整个 lubridate 包。
但是,如果您只想以最“熟悉”的方式使用脚本中的函数,也许最好的方法是:
`%within%` <- lubridate::`%within%`
Run Code Online (Sandbox Code Playgroud)
通过这样做,您实际上是将函数复制到同名的局部变量中。