我正在开发一个提供名为“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)出错:undefined exports:as 调用:loadNamespace - > namespaceExport 执行暂停
命名空间必须只能加载基本命名空间:否则如果命名空间被保存的对象加载,则会话将无法启动。
可能需要在NAMESPACE文件中声明一些导入。
在一个单独的.R文件中,我有:
#' @importClassesFrom sp SpatialPointsDataFrame
我正在使用hadley的devtools包,所以我猜它是roxygen2。这就是我的工作:
R> document("MyPackage")
答案 0 :(得分: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()
函数是从方法包加载的。
所以,我认为我们在NAMESPACE中不需要export(as)
条目。