【问题标题】:How do I resolve Rd warning "missing file link" when building packages in RStudio?在 RStudio 中构建包时如何解决 Rd 警告“缺少文件链接”?
【发布时间】:2018-01-24 19:20:19
【问题描述】:

在构建一个简单的测试包来隔离这个问题后,我在运行Rcmd.exe INSTALL --nomultiarch --with-keep.source simpleTest 时收到以下警告:

* installing to library 'C:/Users/user/Documents/R-dev'
* installing *source* package 'simpleTest' ...
** R
** preparing package for lazy loading
** help
*** installing help indices
  converting help for package 'simpleTest'
    finding HTML links ...    hello                                   html  
Rd warning: C:/user/RPackages/simpleTest/man/hello.Rd:11: missing file link 'transmute'
 done
** building package indices
** testing if installed package can be loaded
* DONE (simpleTest)

当您链接到指向不同名称的 Rd 文件的函数时,会出现此问题。例如,在我的 simpleTest 包中,文档链接到 dplyr::mutate()dplyr::transmute(),两者都记录在 mutate.Rd 文件中。前一个链接不会导致 Rd 警告,而后者会。但是,当您查看当前软件包的帮助页面时,这两个链接都有效。

simpleTest 包的 .R 文件包含在下面。我运行devtools::document(),然后在骨架包目录中构建包。


你好.R

#' print hello
#'
#' This does something less complicated than \code{\link[dplyr:mutate]{dplyr::mutate()}} 
#' and \code{\link[dplyr:transmute]{dplyr::transmute()}}.

#' @export
hello <- function() {
  print("Hello, world!")
}

【问题讨论】:

  • @MrFlick - 您是否使用\code{\link[dplyr:transmute]{dplyr::transmute()}}\code{\link[dplyr]{transmute}} 作为您提供的链接的指示并不重要;无论哪种方式,您都会收到 Rd 警告。

标签: r build package


【解决方案1】:

这是因为链接是根据文件名而不是别名创建的。如果你只使用\link{foo}foo 是一个主题(因此你可以毫无问题地使用别名)。但是,您使用任何形式的那一刻:

\link[pkg]{foo}
\link[pkg:foo]{bar}

foo 需要是一个文件,因此您只能使用名称而不是别名。如果您检查?dplyr::mutate,您会看到mutate 是名称(左上角),transmute 是别名。因此,当您尝试使用别名时,该链接(可能)会起作用,但您会看到您看到的警告。

为避免这种情况,您需要:

\link[dplyr:mutate]{dplyr::transmute()}

供参考:https://cran.r-project.org/doc/manuals/R-exts.html#Cross_002dreferences

【讨论】:

  • 谢谢@JorisMeys。显式链接到文件让我觉得有点危险,因为没有什么可以阻止另一个包的开发人员以一种会导致链接断开的方式更改文档结构。我想你也可以对函数说同样的话,但至少那些通常首先被弃用,看起来你可能会在不考虑任何后果的情况下更改 Rd 名称。
  • @r_alanb 我没有写 R。R core 提供的官方文档告诉你,你使用的构造,需要指向文件,因为这是 R 帮助系统读取链接的方式。你可以尝试说服他们改变这一点;-)
  • 哈,希望我能通过 roxygen 获得更多的运气:github.com/klutometis/roxygen/issues/707
  • @r_alanb 我希望他们能以某种方式抓住它,但我很肯定这与 R 本身有关,而不是与 roxygen 相关。
  • 你是完全正确的,具体来说,它在 install.R 中。但是由于 roxygen 已经将[dplyr::transmute()] 转换为\link[dplyr:transmute]{dplyr:transmute()},希望他们可以在那时搜索并转换为\link[dplyr:mutate]{dplyr:transmute()}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2017-05-17
  • 2018-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多