CRAN R包如何建议使用GitHub R包

5

我希望在我的R包中使用在GitHub上可用的R包BOLTSSIRR,并将其上传至CRAN。

我在DESCRIPTION文件中将BOLTSSIRR列在Suggests:下,并使用Additional_repositories:https://github.com/daviddaigithub/BOLTSSIRR提供了到GitHub的链接。

然而,运行R CMD check --as-cran后,我收到以下提示:

Suggests or Enhances not in mainstream repositories:
  BOLTSSIRR
Availability using Additional_repositories specification:
  BOLTSSIRR   no   ?                                          
  ?            ?   https://github.com/daviddaigithub/BOLTSSIRR
Additional repositories with no packages:
  https://github.com/daviddaigithub/BOLTSSIRR

所以在检查中,GitHub链接似乎没有被识别。我需要在这里更改什么吗?


这个问题已经在这里得到了回答:https://dev59.com/_V0a5IYBdhLWcg3wTHBt - Wiktor Gustafsson
这个回答解决了你的问题吗?创建一个依赖于位于GitHub上的另一个R包的R包 - Oliver
@WiktorGustafsson @Oliver 谢谢。不幸的是,这似乎还没有回答我的问题。在检查中,Remotes:字段似乎无法被识别。我得到了以下警告: “* 检查 CRAN 入站可行性... 警告在 DESCRIPTION 中存在未知、可能拼写错误的字段: 'Remotes'强依赖项不在主流存储库中: BOLTSSIRR”。请注意,在另一个问题的情况下,两个包都在 GitHub 上,而我的包需要上传到 CRAN。 - user3298179
2个回答

7
正如你所发现的,你不能在CRAN包中使用Remotes。您需要做的是确保您所依赖的软件包的.tar.gz文件在某个地方可用。Github不会自动完成此操作,因为https://github.com/daviddaigithub/BOLTSSIRR没有设置为软件包存储库。
解决方法是创建自己的小型存储库,并在那里保存非CRAN包的副本。只要您拥有Github帐户,drat包(在此处可用:https://github.com/eddelbuettel/drat)可以轻松实现此操作:请按照此处的说明操作:https://github.com/drat-base/drat。简而言之:
  1. https://github.com/drat-base/dratfork到您的帐户中,并将其克隆到自己的电脑上。
  2. 在主分支中的docs/文件夹中启用Github Pages。
  3. 使用remotes::install_github("eddelbuettel/drat")在R中安装drat包。(我假设此版本最终会到达CRAN;如果您使用当前的CRAN版本,说明会稍微复杂一些。)
  4. 构建要插入的软件包。您需要源代码版本;如果用户难以构建,则可能还需要二进制文件。
  5. 运行options(dratBranch="docs"); drat::insertPackage(...)将这些文件插入您的存储库中。
  6. 提交更改并将其推送到Github。
  7. 在需要使用此非CRAN包的软件包中,将
    Additional_repositories: https://yourname.github.io/drat
    添加到DESCRIPTION文件中。
需要负责更新您的存储库,如果BOLTSSIRR进行了更新。这很好,因为更新可能会破坏您的软件包:毕竟,它仍处于开发模式。但不好的是,您的用户不会自动获得错误修复。
就是这样,如果我没有漏掉什么!

谢谢你提供这个详细有帮助的答案!目前我在第5步遇到了问题:我尝试了 drat::insertPackage(file="pathtofile/BOLTSSIRR_0.1.0.tar.gz"),但出现了 Error: Directory ~/git/drat not found 的错误。我猜我必须指定参数 repodir。不幸的是,我对 GitHub 不是很熟悉。因此我不理解关于 repodir 的帮助页面。我应该使用什么来作为 repodir - user3298179
我成功上传了软件包,但是出现了以下问题:“* 检查CRAN可行性...警告:无法访问存储库https://github.com/RomanHornung/drat/src/contrib的索引: 无法打开URL'https://github.com/RomanHornung/drat/src/contrib/PACKAGES'建议或增强不在主流存储库中: BOLTSSIRR 使用Additional_repositories规范的可用性: BOLTSSIRR no ? ? ? https://github.com/RomanHornung/drat 没有软件包的其他存储库: https://github.com/RomanHornung/drat”这里可能出了什么问题? - user3298179
我认为你还没有将东西推送到Github。我期望在RomanHornung.github.io/drat找到存储库(步骤2应该已经创建了这个),但是那里什么也没有;在源位置github.com/RomanHornung/drat中,我看到一个存储库,但它里面没有BOLTSSIRR。(这应该发生在第5步之后,但也许你需要一个明确的推送到Github,我没有要求。) - user2554330
我期望在 https://github.com/RomanHornung/drat/tree/master/docs/src/contrib 中看到它,但是它不在那里。在你的本地系统中,它应该是 drat-base 存储库的分支中的 docs/src/contrib。你需要告诉 Github 从那里发布;我忘记了具体操作步骤。 - user2554330
再次感谢!我现在已经把它弄好了:在第5步之前,我使用git clone https://github.com/RomanHornung/drat将drat存储库克隆到我的本地计算机,然后删除了文件夹docs/src/contribdocs/bin/windows/contrib/4.0中的文件。在第5步之前还需要执行options(dratBranch="docs")。在步骤5之后,在我的电脑上的drat目录中,我写了以下内容:1)git add .,2)git commit -m "添加包",3)git push origin master。我从RStudio终端执行了git命令。 - user3298179
显示剩余2条评论

0
回答一下,因为我不能评论。@user2554330的答案是正确的,并且将修复附加包不可用的问题。然而,你可能仍然会收到以下注意事项:
包建议但无法检查:<yourpackage>
你应该能够解释这是由于drat托管的库导致的,但该包在检查中的vignettes/examples中将不可用。这个注意事项在CRAN政策中仍然适用:
如果一个包在"Suggests"或"Enhances"中列出,如果它不能在主要的R平台上直接安装,那么在示例或测试中应该有条件地使用它。("编写R扩展"建议始终有条件地使用它们。)
在我的提交中,由于无法找到在drat仓库中列出的包,我在示例中遇到了错误。解决这个问题的一种方法是在roxygen注释中使用@examplesIf requireNamespace("yourpackage", quietly = TRUE)而不是@examples,或者在vignettes中有条件地运行一些内容。
if (requireNamespace("yourpackage", quietly = TRUE)) {
  result = yourpackage::function()
  # ...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接