6

我正在开发一个提供名为“Foo”的 S3 类的包。它还提供了一种“as”方法,用于将其强制为(其他人的)名为“Bar”的 S4 类。我的代码如下所示:

#' ...
setOldClass("Foo")

#' ...
setAs("Foo", "SpatialPointsDataFrame", function(from) { 
   # do stuff and return a SpatialPointsDataFrame
})

编辑我试过这个:

#' ...
#' @name as
#' @export
setAs("Foo", "SpatialPointsDataFrame", function(from) { 
   # do stuff and return a SpatialPointsDataFrame
})

但后来我从 R CMD CHECK 得到这个:

检查名称空间是否可以加载声明的依赖项...警告 namespaceExport(ns,exports) 中的错误:未定义的导出:as 调用:loadNamespace -> namespaceExport 执行暂停

命名空间必须能够只加载基本命名空间:否则如果命名空间被保存的对象加载,会话将无法启动。

可能需要在 NAMESPACE 文件中声明一些导入。

在一个单独的 .R 文件中,我有:

#' @importClassesFrom sp SpatialPointsDataFrame

我正在使用 hadley 的 devtools 包,所以我猜它是 roxygen2。这就是我所做的:

R> document("MyPackage")
4

1 回答 1

5

roxygen2 解析器没有解析setOldClass()setAs(). 我们需要获取合适的@name标签。

#' "Foo" class
#'
#' @name Foo-class
#' @aliases Foo
#' @family Foo
#'
#' @exportClass Foo
setOldClass("Foo")

#' As("Foo", "SpatialPointsDataFrame")
#'
#' @name as
#' @family Foo
#'
#' @importClassesFrom sp SpatialPointsDataFrame
setAs("Foo", "SpatialPointsDataFrame", function(from) { 
   # do stuff and return a SpatialPointsDataFrame
})

我不详细了解该setAs()功能,但该as()功能是从方法包中加载的。所以,我认为我们不需要export(as)进入 NAMESPACE。

于 2011-10-14T11:10:19.653 回答