【问题标题】:Why does running "devtools::check()" cause a custom function to be recognised by R- why doesn't my function get recognised before this step?为什么运行“devtools::check()”会导致 R 识别自定义函数 - 为什么在此步骤之前我的函数没有被识别?
【发布时间】:2020-09-22 22:34:17
【问题描述】:

我为一个名为“DataSHIELD”(https://www.datashield.ac.uk) 的学术项目工作,我参与了为他们开发和测试新功能的工作。其中一个新函数称为“ds.glmPredict”,它是本机 R“predict.glm()”函数的定制版本,但进行了一些更改,因此不会将非公开统计数据返回给数据分析师(这是一般整个 DataSHIELD 项目的目标)。

这个函数代码包含在一个 github 项目和分支中,我将其拉入到一个 RStudio 项目中,以便将所有内容都放在正确的目录中。

但是,如果我尝试加载此特定功能“ds.glmPredict”的帮助;

> ?ds.glmPredict()
Error in .helpForCall(topicExpr, parent.frame()) : 
  no methods for ‘ds.glmPredict’ and no documentation for it as a function

然而,如果我然后运行devtools::check(),这将通过 R 中的幕后工作(请原谅我对 devtools 的无知,我从来没有遇到过一个好的资源可以用简单的语言向我解释 devtools 包是什么或做什么)并且完成后,我可以运行?ds.glmPredict(),它会首先生成我想要的帮助控制台信息:

> ?ds.glmPredict()
Rendering development documentation for 'ds.glmPredict'

是 DataSHIELD 的基础架构存在问题,导致 R 在首次启动程序时无法识别特定功能,还是可能完全是其他问题?

【问题讨论】:

  • 您的工作流程似乎缺少构建包的关键步骤。 devtools::check 在运行测试之前构建包(包括文档)。

标签: r devtools


【解决方案1】:

devtools::document 可以解决问题。 R 找不到帮助文件,因为您只提取了没有 .Rd 文件的功能代码,而 package root\man 中的文件,这就是它抛出错误的原因。 devtools::check 自动构建并检查包,并在构建过程中调用 devtools::document,这只是 roxygen2::roxygenize 的包装器,它在将特殊 cmets 转换为 .Rd 文件时完成繁重的工作。

【讨论】:

    猜你喜欢
    • 2020-11-03
    • 2019-10-23
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    相关资源
    最近更新 更多