使用Roxygen文档说明setAs()和setOldClass()函数

6

我正在开发一个包,提供了一个名为 "Foo" 的 S3 类。它还提供了一个 "as" 方法,用于将其转换为 (别人的) S4 类 "Bar"。我的代码如下:

#' ...
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")

Hadley的开发工具包。已编辑以显示最佳尝试。 - dholstius
不错的编辑。如果这个问题不久得到解答,我会感到惊讶的。 - Ari B. Friedman
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()函数是从methods包中加载的。因此,我认为我们不需要在NAMESPACE中添加export(as)条目。

1
虽然我不是Roxygen专家,而且这个问题也很老了,但是... setAs()会在coerce上创建一个方法,其签名为coerce,Foo,SpatilPointsDataFrame,因此您需要使用@name coerce和可能的@aliases coerce,Foo,SpatilPointsDataFrame-method。您需要使用@exportMethods coerce将其公开。 - Martin Morgan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接