【发布时间】:2018-09-14 16:45:25
【问题描述】:
我创建了我的第一个 R 包并有一个问题。
该软件包在我的计算机上成功运行。但是,如果我的用户(没有所需的包)运行我的包,他们将收到错误消息,指出所需的包不可用。当他们从 CRAN 手动安装该软件包时,我的软件包就可以工作了。
根据 Hadley Wickam 的书 (http://r-pkgs.had.co.nz/description.html):
导入:此处列出的软件包必须存在,您的软件包才能正常工作。事实上,无论何时安装你的包,这些包(如果还没有的话)都会安装在你的计算机上(devtools::load_all() 也会检查这些包是否已安装)。
我将所有必需的包放在 DESCRIPTION 的 Imports 字段中。为什么没有自动安装所需的软件包?我的用户在使用我的之前需要安装所有必需的软件包吗?
其他背景:
- 我在脚本中使用约定 package_name::function_name。
- 我将包分发为二进制包。
- 用户从他们的本地目录安装包,所以他们 调用 install.packages 时无法指定 DEPENDENCIES=TRUE。
我做了什么:
- 阅读 Hadley Wickham 的书 R Packages
- 读取 Imported packages do not auto-install 和 R package dependencies 但没有找到任何关于我的问题的信息。
谢谢!
【问题讨论】:
-
所以你的包不是从 CRAN 或 GitHub 安装的?
-
您链接的问题about imported packages not auto-installing 似乎几乎完全相同。
install.packages将在指定的存储库中查找要安装的依赖项。如果您只是让用户在本地安装,则没有存储库,也没有安装依赖项。如果您不想处理 CRAN,Dirk 建议使用他的包 drat 创建您自己的包含所有依赖项的小型存储库。 -
这:“无论何时安装您的软件包,这些软件包(如果尚未存在)将安装在您的计算机上”通常不是真的。要么是哈德利在写这句话时的想法有误,要么(更有可能)你没有对该语句的上下文给出完整的描述。您需要采取特定步骤来安装依赖项。
install.packages中有一个“依赖项”参数,但我怀疑 Hadley 正在使用一些特殊用途的功能,其部署在该文本摘录的上游。 -
Dason,是的,它是在我们的团队中使用的。所以我一直通过电子邮件分发它。我们的下一个计划是将其托管在闪亮的服务器上。
-
格雷戈,谢谢!是的,它们几乎相同。我想知道除了使用 drat 是否还有其他方法可以做到这一点。谢谢。