我正在使用roxygen2包来记录我的包。正如Hadley Wickham在第7.8节中所建议的,
内部函数应按照惯例用
#'
注释进行记录。使用@noRd标记可以阻止生成Rd
文件。
通常,我在一个R文件中有内部函数,因此使用@rdname标记。然而,如果我使用@noRd标签,它没有任何效果。
例如,如果您roxygenize()
此文件名为";iloveAnimals";,包装内:
#' @title Cats
#' @name iloveAnimals
#'
#' @description The following logical functions check if you love animals
#'
#' @param loveCats Logical; TRUE if you love Cats
#' @details
#' loveCats: do you love cats
#' @rdname iloveAnimals
ilovecats <- function(loveCats){
if(loveCats){
print("you love cats")
} else{
print("you hate cats")
}
}
#' @param loveBirds logical; TRUE if you love birds.
#' @details
#' loveBirds: Do you love birds?
#' @rdname iloveAnimals
ilovebirds <- function(loveBirds){
if(loveBirds){
print("you love birds")
} else{
print("you hate birds")
}
}
#' @noRd
在一个包裹内产生
roxygen2::roxygenize()
Writing NAMESPACE
Writing NAMESPACE
Writing iloveAnimals.Rd
这是令人惊讶的,因为不应该编写Rd
文件。写入Rd
文件时,就好像@noRd标记没有效果一样。如果不使用@rdname,则@noRd标记有效,并且不会写入Rd
文件。有两种简单的解决方案:
- 注释掉内部函数或
- 每个文件有一个内部函数,以避免使用@rdname标记
然而,这些解决方案违反了roxygen2的精神。
请roxygen2github页面获取此问题的答案。谢谢,@gaborcsardi。
https://github.com/r-lib/roxygen2/issues/1141#issuecomment-660612297(从那里复制(:
Roxygen块和Roxygen标记应用于它们之后的表达式,因此您需要将@noRd放在不需要.Rd文件的表达式前面。也许你也必须删除@rdname,我不知道,但无论如何,@noRd对我们来说毫无用处:
#' @title Cats
#' @name iloveAnimals
#'
#' @description The following logical functions check if you love animals
#'
#' @param loveCats Logical; TRUE if you love Cats
#' @details
#' loveCats: do you love cats
#' @noRd
ilovecats <- function(loveCats){
if(loveCats){
print("you love cats")
} else{
print("you hate cats")
}
}
有关只将内部函数排除在索引之外的替代方案,请参阅以下内容:https://blog.r-hub.io/2019/12/12/internal-functions/#how-记录内部功能