【问题标题】:Importing S3 method from another package从另一个包导入 S3 方法
【发布时间】:2013-03-22 05:53:51
【问题描述】:

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

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
}

【问题讨论】:

    标签: r package


    【解决方案1】:

    总结一下,原来的(下)现在已经过时了,并且在某些地方有错误或误导性。

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

    您的包需要在DESCRIPTION 中包含Depends: pls,以便R 可以使用正确的predict 方法。pls 中没有可以专门导入的内容。 p>

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

    #' @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, ...) 
    

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

    【讨论】:

    • 或者不要将pls放在Description DEPENDS中,直接使用pls:::predict.mvr(并确保pls至少在Description IMPORTS中以保证其安装)。
    • 直接使用pls:::predict.mvr 不好,三个冒号表示你在作者不希望你的地方闲逛。
    • 我刚刚解决了类似的问题,方法是将相关包放入 Imports 并在命名空间中添加 importFrom("package", "method")。
    猜你喜欢
    • 2018-07-03
    • 2019-07-03
    • 2016-01-27
    • 1970-01-01
    • 2018-03-20
    • 2020-02-24
    • 1970-01-01
    • 2021-01-15
    相关资源
    最近更新 更多