我正在尝试从另一个包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
}
答案 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
方法。