【问题标题】:Why doesn't my package function find other non-export tagged functions?为什么我的包函数找不到其他非导出标记函数?
【发布时间】:2015-08-28 17:54:15
【问题描述】:

我已经阅读了 Hadley Wickham 的大部分好书:http://r-pkgs.had.co.nz/,但我很困惑为什么我的包中的函数找不到其他未导出的函数。

例如我有

#' @export
#' @import ggmap
#' @import hexbin
map  <- function(return.query, zoom, maptype, histObj) {

  UseMethod("map")

}
#' 
map.querySold  <- function(query, zoom = 11, maptype = "roadmap") {
  My Code
}

在干净的环境中运行它并加载我的包会产生错误:

> map(x) # x is of class querySold
Error in UseMethod("map") : 
  no applicable method for 'map' applied to an object of class "c('querySold', 'data.frame')"

出了什么问题,我该如何解决?我认为内部功能始终可用于包中的所有其他功能? 直到我用devtools::load_all(".") 加载所有函数,它才能工作。

【问题讨论】:

    标签: r r-package


    【解决方案1】:

    我怀疑你没有@export map.querySold。请尝试以下操作:

    @export 放在第一个map 函数之前。

    #' @import ggmap
    #' @import hexbin
    #' @export
    map  <- function(return.query, zoom, maptype, histObj) {
    
      UseMethod("map")
    
    }
    

    并在此处添加@export

    #'@export 
    map.querySold  <- function(query, zoom = 11, maptype = "roadmap") {
      My Code
    }
    

    然后运行devtools::document() 并检查NAMESPACE 文件。

    如果这不起作用,发布您的NAMESPACE 可能会有所帮助。我想你应该有

    S3method(map.querySold)
    export(map)
    

    【讨论】:

    • 谢谢!我看到 S3 方法并没有像我想象的那样公开。我是否需要导出包中的所有函数(我在考虑引用另一个简单函数的情况)?
    • 不客气。不,您不需要导出所有函数。只需导出为用户准备的功能。您的其他函数仍可在导出的函数中使用。
    • 啊,是的。好的,所以 S3 方法也需要导出,这就是我的目标。
    猜你喜欢
    • 2019-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 2017-03-31
    • 1970-01-01
    相关资源
    最近更新 更多