在添加新方法roxygen2时,可以使S3通用函数名可用

时间:2016-03-08 10:35:33

标签: r roxygen2

我在R包中编写了一个新的S3方法,用于包'hydroGOF'的泛型函数'NSE',我不确定如何(让roxygen2)制定NAMESPACE。

这是一个例子。 'NSE'有两个必需的参数,'sim'和'obs'。

#' @export
#' @importFrom hydroGOF NSE NSE.default
NSE.foo <- function(sim, obs, na.rm = TRUE, ...) {
  NSE.default(as.numeric(sim), as.numeric(obs), na.rm = TRUE, ...)
}

当我构建包时,这些行被添加到NAMESPACE:

S3method(NSE,foo)
importFrom(hydroGOF,NSE)
importFrom(hydroGOF,NSE.default)

我现在的问题是,当我加载我的包时,(通用)函数'NSE'不可用,并且R抛出'未知函数'错误:

> library(mypackage)
> s <- rnorm(10)
> o <- rnorm(10)
> class(s) <- "foo"
> class(o) <- "foo"
> NSE(sim = s, obs = o)
Error: could not find function "NSE"

...除非我首先加载'hydroGOF',在哪种情况下它会按照我想要的方式加载:

> library(hydroGOF)
> NSE(sim = s, obs = o)
[1] -1.195519

我知道这与加载的hydroGOF函数有关,但在我附上我的包时没有附加,但我不知道如何解决这个问题。没有“@depends”roxygen指令我可以使用而不是'@importFrom',或者?

我怀疑我到达了Hadley在his R-package/Namespace page上概述的“情景4”:

  

建议包中的泛型的方法。命名空间指令必须引用可用的函数,因此它们不能引用建议的包。可以使用包钩子和代码在运行时添加它,但这非常复杂,我目前不推荐它。相反,您必须以避免这种情况的方式设计包依赖关系。

...但我不知道如何避免它。 :)

任何帮助表示赞赏。谢谢!

0 个答案:

没有答案