【问题标题】:How to pre-install r packages which are required to run the package you create? [duplicate]如何预安装运行您创建的包所需的 r 包? [复制]
【发布时间】:2019-08-04 00:01:02
【问题描述】:

我在 R 中创建了一个新包,我的包中的功能需要预安装的包,如 igraphdplyr 才能正常运行。在DESCRIPTION 文件中,我确实在Imports 字段中添加了这些包。但是当我运行我的包时,我收到一个错误,表明尚未安装所需的包。

为了检查问题是什么,我单独安装了预先需要的包并运行了我的包,然后它似乎工作正常。

这就是我的DESCRIPTION 文件的样子

Package: xxx
Type: Package
Title: xxx
Version: 0.1.0
Author: xxx
Maintainer: xxx
Description: xxx 
License: GPL-2
Encoding: UTF-8
LazyData: FALSE
Imports: 
    igraph,dplyr,network,gridExtra,centiserve
RoxygenNote: 6.1.1

无论如何我可以只加载我的包,然后自动加载预先需要的包,而不必手动加载像 igraphdplyr 这样的预先需要的包。

【问题讨论】:

  • "但是当我运行我的包时" -- 你的意思是当你尝试安装你的包时,还是当你尝试加载你的(安装的)包时?
  • 我的意思是当我加载我的(安装的)包并在其中运行函数时
  • stackoverflow.com/questions/5805049/… ...如果您在从源安装本地包时询问如何安装依赖项

标签: r igraph r-package


【解决方案1】:

这个问题提出了与this Stack Overflow question 相同的问题。我提供这个答案是为了提供比其他问题更多的细节和官方来源。

问题是您在Imports 而不是Depends 中列出了包。通常这是可取的,但如果你这样做,你必须注意在NAMESPACE文件中导入你需要的函数。来自Writing R Extensions, Section 1.1.3

“Imports”字段列出了从其名称空间导入(在 NAMESPACE 文件中指定)但不需要附加的包。

因此,当您的包被加载时,Imports 中的包不会被加载,如果在 Depends 中指定它们就是这种情况。

我的建议是将这些包保存在Imports 中,然后在NAMESPACE 中指定必要的导入函数,或者使用类似的语法在该文件中手动添加语句

importFrom(foo, f, g)

(参见Writing R Extensions, Section 1.5.1),或通过R 脚本中的roxygen2 标签,如

#' @importFrom foo f

【讨论】:

  • 保留答案,它具有欺骗者没有的有用链接。如果你愿意,我可以欺骗锤子。
  • @RuiBarradas 听起来不错!谢谢
猜你喜欢
  • 2012-01-10
  • 2019-07-21
  • 2018-05-13
  • 2020-05-02
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
相关资源
最近更新 更多