在R中使用支持功能以保持DRY的最佳方式

时间:2013-02-13 17:13:14

标签: r dry

在处理我的第一个R包时,注意到当在man目录“man”中创建包结构时,代码中的每个函数/方法都有一个文档文件。

为了保持DRY(不要重复自己),我在循环或迭代中使用了一些函数作为“辅助”函数。我怎么能告诉R我不想为他们提供任何文件,因为不应该由最终用户直接调用它们?!?!

3 个答案:

答案 0 :(得分:4)

使用roxygen2devtools软件包记录您的功能并构建您的软件包。

#' Function 1 Title
#'
#' Describe what function 1
#' does in a paragraph. This function
#' will be exported for external use because
#' it includes the @export tag.
#'
#' @param parameter1 describe the first parameter
#' @param parameter2 describe the second parameter
#' @examples
#' function1(letters[1:10], 1:10)
#' @export
function1 <- function(parameter1, parameter2) {
  paste(parameter1, parameter2)
}

#' Function 2 Title
#'
#' Description here. This will not 
#' be added to the NAMESPACE.
#'
#' @param parameter1
function2 <- function(parameter1) {
  parameter1
}

获得所有文档后,请使用devtools包中的工具来构建,记录和检查您的包。它将自动更新man文件和DESCRIPTION,并在NAMESPACE中添加/删除功能。

document()
build()
check()

我还建议使用rbundler包来控制加载包的方式。

答案 1 :(得分:3)

如果您不通过NAMESPACE导出它们,则不应提供文档。

另一个(较旧的)太简单了,创建一个,比如internal.Rd并定义一堆\alias{foo}, \alias{bar}, \alias{frob},这样代码工具也很开心。

答案 2 :(得分:0)

感谢@ Jojoshua-ulrich和@ dirk-eddelbuettel

根据“写R扩展”:

  

man子目录应该包含(仅)R文档(Rd)格式的包中对象的文档文件。文档文件名必须以ASCII(大写或小写)字母或数字开头,并且扩展名为.Rd(默认值)或.rd。此外,名称必须在'file://'URL中有效,这意味着它们必须完全是ASCII且不包含'%'。有关更多信息,请参阅编写R文档文件。请注意,应记录包中的所有用户级对象;如果包pkg包含仅供“内部”使用的用户级对象,则它应提供文件pkg-internal.Rd,该文件记录所有此类对象,并明确指出这些对象不应由用户调用。参见例如例如,R分布中的包网格的来源。请注意,广泛使用内部对象的包不应在不需要记录的情况下从命名空间中导出这些对象(请参阅包命名空间)。

顺便说一句,是否有任何约定在代码中包含注释,以便man直接从代码中获取函数描述,参数描述等?