2013-02-13 63 views
1

在处理我的第一个R包时,注意到当在man目录“man”中创建包结构时,代码中的每个函数/方法都有一个文档文件。在R中使用支持功能以保持DRY的最佳方式

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

+3

请阅读[编写R扩展的第1.1.3节](http://cran.r-project.org/doc/manuals/R-exts.html#Package-subdirectories)。 – 2013-02-13 17:19:19

回答

3

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

另一个(老)是太简单了创建一个,例如internal.Rd并定义了一堆\alias{foo}, \alias{bar}, \alias{frob},那样Codetools也很开心。

+0

'internal.Rd'?或者你现在使用的是RMarkdown文档吗? ;) – hadley 2013-02-14 16:01:33

+0

哇。什么是弗洛伊德式的滑倒。正在修复... – 2013-02-14 16:04:29

0

感谢@ Jojoshua - 乌尔里希和@德克 - eddelbuettel

据“写作R附加”:

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

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

+0

没有办法做到你想要的东西。但有'roxygen'这是一个包,它可以让你根据代码中的注释生成文档(但你必须正确格式化注释) – Dason 2013-02-13 18:23:07

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文件和说明,并从NAMESPACE中添加/删除功能。

document() 
build() 
check() 

我还推荐使用rbundler包来控制如何加载包。

+1

你并不需要devtools来使roxygen运行(你可以只需使用'roxygenize()'),但它确实使这个过程更容易一些。我提到这只是因为我有一些情况,其中'document()'由于某种原因未能构建所有内容,而是'roxygenize()'运行良好。 – Dason 2013-02-13 19:11:46

+0

@Dason如果你[报告那些错误](https://github.com/hadley/devtools/issues),它总是会受到赞赏的。 – hadley 2013-02-14 16:00:44

+0

“添加/删除NAMESPACE中的函数”:我最大的抱怨之一。我不会让roxygen2触摸DESCRIPTION或NAMESPACE,并使用'roclets =“rd”'的包装器。 – 2013-02-14 16:06:52

相关问题