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

时间:2011-10-13 18:31:12

标签: r roxygen2

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

1 个答案:

答案 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)条目。