我正在开发一个提供名为"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)
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.