r-roxygen2:@noRd标记在记录内部函数时,在@rdname标记存在的情况下没有任何作用



我正在使用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文件。有两种简单的解决方案:

  1. 注释掉内部函数或
  2. 每个文件有一个内部函数,以避免使用@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-记录内部功能

相关内容

最新更新