从另一个包导入S3方法

时间:2013-03-22 05:53:51

标签: r package

我正在尝试从另一个包predict导入一个S3方法pls。我有一个使用这些预测值的函数。问题是,在编译包时:

Error : object 'predict' is not exported by 'namespace:pls'

我将this Gist放在一起作为一个最小的例子,它突出了我的问题并包含以下R文件:

#' Test function
#' 
#' @importFrom pls predict
#' 
#' @export

myfunc <- function(x){
  stopifnot(class(x) == "mvr")
  predict(x)*2
}

1 个答案:

答案 0 :(得分:10)

总结一下,因为原文(下方)现已过时,并且有错误或误导的地方。

近端问题是 pls 包中没有名为predict的函数; predict有一些未导出的S3方法,但没有predict。所以你不能导入它。 predict通用版存在于 stats 包中,您需要从中导入,如下所述。

您的资料包需要Depends: pls DESCRIPTION才能让正确的predict方法可供R使用。中没有任何内容可供您使用可以专门导入。

您还需要从统计信息命名空间中导入predict泛型,因此请添加

#' @importFrom stats predict

因为它将导入您的包命名空间中的泛型。您还需要将Imports: stats添加到DESCRIPTION文件中,以表明您需要统计信息包;以前我们不必声明R附带的基本软件包集合的依赖关系(即R附带的非推荐的基础软件包)。


原始

这里的主要问题是没有定义函数/方法predict。它为predict泛型提供了几种方法,但不提供通用本身。

如果需要,您需要从 stats 包中导入泛型 - 我不确定您是否这样做,因为您没有创建需要或基于泛型的功能。至少你需要

#' @importFrom stats predict

虽然您可能需要/想要导入整个 stats 命名空间 - 取决于您的软件包在您当前正在处理的功能之外所做的事情。

另一个问题是从命名空间

导出predict.mvr
> require(pls)
Loading required package: pls

Attaching package: ‘pls’

The following object(s) are masked from ‘package:stats’:

    loadings

> predict.mvr
Error: object 'predict.mvr' not found
> pls::predict.mvr
Error: 'predict.mvr' is not an exported object from 'namespace:pls'
> pls:::predict.mvr
function (object, newdata, ncomp = 1:object$ncomp, comps, type = c("response", 
    "scores"), na.action = na.pass, ...) 

因此你不能只导入它。因此,您的包需要在Depends: pls中包含DESCRIPTION才能找到正确的predict方法。