首页 > 解决方案 > 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的精神。

标签: rroxygen2

解决方案


roxygen2 github 页面获取此问题的答案。谢谢,@gaborcsardi。

https://github.com/r-lib/roxygen2/issues/1141#issuecomment-660612297


推荐阅读