15

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

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

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

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

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

1 回答 1

11

总结这一点,因为原来的(下面)现在已经过时并且在某些地方是错误的或误导的。

最接近的问题是plspredict中没有命名函数;有一些未导出的 S3 方法,但没有。所以你不能导入这个。泛型存在于stats包中,您需要从那里导入,如下所述。predictpredictpredict

您的包需要具有正确的Depends: pls方法才能对 R 可用。您可以专门导入pls中的任何内容。DESCRIPTIONpredict

您还需要从statspredict命名空间导入泛型,所以添加

#' @importFrom stats predict

因为这将在你的包命名空间中导入泛型。您还需要添加Imports: stats到您的DESCRIPTION文件以表明您需要stats包;以前,我们不必声明对 R 附带的一组基本包(即 R 附带的非推荐包)的依赖关系。


原来的

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

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

#' @importFrom stats predict

尽管您可能需要/想要导入整个stats命名空间 - 取决于您的包在您当前正在处理的功能之外做什么。

另一个问题是predict.mvr不是pls命名空间导出的

> 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: plsDESCRIPTION顺序排列才能找到正确的predict方法。

于 2013-03-22T06:05:54.947 回答