在處理我的第一個R包時,注意到當在man目錄「man」中創建包結構時,代碼中的每個函數/方法都有一個文檔文件。在R中使用支持功能以保持DRY的最佳方式
爲了保持乾爽(不要重複自己),我在循環或迭代中使用了一些函數作爲「輔助」函數。我如何告訴R我不想爲他們提供任何文檔,因爲他們不應該由最終用戶直接調用?!?!
在處理我的第一個R包時,注意到當在man目錄「man」中創建包結構時,代碼中的每個函數/方法都有一個文檔文件。在R中使用支持功能以保持DRY的最佳方式
爲了保持乾爽(不要重複自己),我在循環或迭代中使用了一些函數作爲「輔助」函數。我如何告訴R我不想爲他們提供任何文檔,因爲他們不應該由最終用戶直接調用?!?!
如果您不通過NAMESPACE導出它們,則不需要提供文檔。
另一個(老)是太簡單了創建一個,例如internal.Rd
並定義了一堆\alias{foo}, \alias{bar}, \alias{frob}
,那樣Codetools也很開心。
'internal.Rd'?或者你現在使用的是RMarkdown文檔嗎? ;) – hadley 2013-02-14 16:01:33
哇。什麼是弗洛伊德式的滑倒。正在修復... – 2013-02-14 16:04:29
感謝@ Jojoshua - 烏爾裏希和@德克 - eddelbuettel
據「寫作R附加」:
男人子目錄應包含(只)文檔在包中的R對象文件文檔(Rd)格式。文檔文件名必須以ASCII(小寫或大寫)字母或數字開頭,並具有擴展名.Rd(默認)或.rd。此外,這些名稱必須在'file://'URL中有效,這意味着它們必須完全是ASCII並且不包含'%'。有關更多信息,請參閱編寫R文檔文件。請注意,應該記錄包中的所有用戶級對象;如果軟件包pkg包含僅供「內部」使用的用戶級對象,則它應該提供一個文件pkg-internal.Rd,它記錄所有這些對象,並明確指出這些對象不應被用戶調用。見例如例如R分佈中的封裝網格的來源。請注意,廣泛使用內部對象的軟件包在不需要記錄時請不要從其名稱空間導出這些對象(請參閱軟件包名稱空間)。
順便說一下,是否有任何約定在代碼中包含註釋,以便man直接從代碼中獲取函數描述,參數描述等?
沒有辦法做到你想要的東西。但有'roxygen'這是一個包,它可以讓你根據代碼中的註釋生成文檔(但你必須正確格式化註釋) – Dason 2013-02-13 18:23:07
使用roxygen2
和devtools
包來記錄你的功能並構建你的包。
#' 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
包來控制如何加載包。
你並不需要devtools來使roxygen運行(你可以只需使用'roxygenize()'),但它確實使這個過程更容易一些。我提到這只是因爲我有一些情況,其中'document()'由於某種原因未能構建所有內容,而是'roxygenize()'運行良好。 – Dason 2013-02-13 19:11:46
@Dason如果你[報告那些錯誤](https://github.com/hadley/devtools/issues),它總是會受到讚賞的。 – hadley 2013-02-14 16:00:44
「添加/刪除NAMESPACE中的函數」:我最大的抱怨之一。我不會讓roxygen2觸摸DESCRIPTION或NAMESPACE,並使用'roclets =「rd」'的包裝器。 – 2013-02-14 16:06:52
請閱讀[編寫R擴展的第1.1.3節](http://cran.r-project.org/doc/manuals/R-exts.html#Package-subdirectories)。 – 2013-02-13 17:19:19