使用Roxygen记录setAs()和setOldClass()

dho*_*ius 6 r roxygen2

我正在开发一个提供名为"Foo"的S3类的包.它还提供了一种"as"方法,用于将其强制转换为名为"Bar"的(其他人)S4类.我的代码看起来像这样:

#' ...
setOldClass("Foo")

#' ...
setAs("Foo", "SpatialPointsDataFrame", function(from) { 
   # do stuff and return a SpatialPointsDataFrame
})
Run Code Online (Sandbox Code Playgroud)

编辑我试过这个:

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

但是我从R CMD检查得到这个:

检查是否可以使用声明的依赖项加载名称空间...警告namespaceExport(ns,exports)中的错误:undefined exports:as Calls:loadNamespace - > namespaceExport Execution halted

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

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

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

#' @importClassesFrom sp SpatialPointsDataFrame
Run Code Online (Sandbox Code Playgroud)

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

R> document("MyPackage")
Run Code Online (Sandbox Code Playgroud)

Tri*_*ou. 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
})
Run Code Online (Sandbox Code Playgroud)

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