实际问题
如何避免路文件名冲突时
- 一个S4通用的和其方法(一个或多个) 不必都在同一个包中定义(含有(部分的)自定义方法(一个或多个)软件包依赖于包含所述通用包),并
- 使用
roxygenize()
从包装roxygen2产生实际Rd文件?
我不知道这是否是一个roxygen2
问题或当通用和它的方法(S)已遍布包(恕我直言,一般来说,绝对是一个现实的用例场景,如果你遵循模块化编程风格)的共同问题。
什么是处理这些情况的推荐的方法?
插图
在包pkga
假设在包pkga
你定义一个通用的方法foo
以及您提供的相应的roxygen代码roxygenize()
拿起生成路文件:
#' Test function
#'
#' Test function.
#'
#' @param ... Further arguments.
#' @author Janko Thyson \email{janko.thyson@@rappster.de}
#' @example inst/examples/foo.R
#' @docType methods
#' @rdname foo-methods
#' @export
setGeneric(
name="foo",
signature=c("x"),
def=function(
x,
...
) {
standardGeneric("xFoo")
}
)
当roxygenizing()
你的包,一个名为foo-methods.Rd
的创建man
子目录用作可能把这个通用方法创建的所有方法的参考文件路。 到现在为止还挺好。 如果所有这个通用的方法也是你的包,一切都很好的一部分。 例如,这roxygen代码将确保该文件被添加到foo-methods.Rd
为ANY
的-方法foo
:
#' @param x \code{ANY}.
#' @return \code{TRUE}.
#' @rdname foo-methods
#' @aliases foo,ANY-method
#' @export
setMethod(
f="foo",
signature=signature(x="ANY"),
definition=cmpfun(function(
x,
...
) {
return(TRUE)
}, options=list(suppressAll=TRUE))
)
但是,如果包pkga
提供通用的为foo
,你在其他一些包装决定(比如说pkgb
)添加foo
-方法为x
类的福利character
,那么R CMD check
会告诉你,有一个名称冲突相对于路的文件名和/或别名(因为已经有一个RD文件foo-methods.Rd
在pkga
):
在包pkgb
#' @param x \code{character}.
#' @return \code{character}.
#' @rdname foo-methods
#' @aliases foo,character-method
#' @export
setMethod(
f="foo",
signature=signature(x="character"),
definition=cmpfun(function(
x,
...
) {
return(x)
}, options=list(suppressAll=TRUE))
)
更精确地说,这是写入文件,该文件抛出的错误/ 00install.out
Error : Q:/pkgb/man/foo-methods.Rd: Sections \title, and \name must exist and be unique in Rd files
ERROR: installing Rd objects failed for package 'pkgb'
尽职调查
我试图更改值@rdname
和@aliases
到foo_pkgb*
(而不是foo*
),但\title
和\name
仍然被设置为foo
roxygenizing时,因此错误仍然存在。 任何想法除了手动编辑所产生的Rd文件 roxygenize()
编辑2012年12月1日
在开始赏金的光,实际问题可能会得到一个稍宽的味道:
我们怎样才能实现某种形式的“跨包”检查相对于Rd文件和/或我们如何才能巩固,以目前的参考单一来源到最后散落在封装成一个单一的路文件S4方法帮助文件-用户?