8

对于我编写的代码,我倾向于明确而不是隐含。因此,在成功创建自己的包之后,我立即想到的下一件事就是如何最好地确保我的代码的健壮性和可靠性。其中一部分与我的包所依赖的包有关。

实际问题

在这方面:是否可以明确说明需要/期望哪个版本的包依赖项?

我正在寻找不需要说明zip文件的实际路径的方法(这当然很容易),而只是使用install.packages说明包名称的“标准行为” (可能有一些所需版本的参考)。

尽职调查

我已经检查了Writing R Extensions以查看我Depends对文件部分的选择是什么DESCRIPTION,希望有一种类似的机制可以用于说明所需的 R 版本(例如R (>= 2.15.2))。但我没有发现任何类似的包依赖项:

'Depends' 字段给出了这个包所依赖的包名的逗号分隔列表。包名后面可以有一个可选的括号中的注释。注释应包含比较运算符、空格和有效的版本号。

如果您的包依赖于某个版本的 R,您也可以使用特殊的包名称“R”——例如,如果该包仅适用于 R 版本 2.11.0 或更高版本,请在其中包含“R (>= 2.11.0)” “取决于”字段。您还可以要求 R-devel 或 R-patched 的某个 SVN 版本,例如,“R (>= 2.14.0), R (>= r56550)”需要 2011 年 7 月下旬的 R-devel 之后的版本(包括发布2.14.0 版本)。库和 R 包检查工具都使用此字段:因此使用不正确的语法或滥用“Depends”字段来评论可能需要的其他软件是错误的。其他依赖项(R 系统外部)应列在“SystemRequirements”字段中,可能会在单独的 README 文件中放大。

R INSTALL 工具检查所使用的 R 版本是否足够新以安装正在安装的包,并且指定的包列表将在当前包之前附加(在检查版本要求之后),无论是在调用库时还是在准备时用于安装期间的延迟加载。

然后我也看了看 ainstall.packages并希望有类似的version论点,但我想没有。

免责声明

我完全清楚我的问题的目标可能会与 R 的通过 CRAN 包存储库分发和安装包的哲学形成鲜明对比,其中(至少我猜)某些包的新版本只是“推翻”以前的包,并且install.packages()总是选择最新的可用包. 为了不让事情变得过于复杂,向最终用户隐藏版本特性也很有意义。

然而,关于编写尽可能健壮的代码的目标,恕我直言,非常明确地陈述事情也是有意义的。或者至少可以选择这样做。

4

1 回答 1

9

你确实使用Depends. 例如:

Depends: R (>= 2.15.0), foo (== 1.17-12)

将对大于或等于 2.15.0 的 R版本foo等于1.17-12.

(至少如果我对您的理解正确,您想明确声明您的包仅适用x.yy-zz于包foo的版本。)

不过,我不确定这对最终用户有多大帮助;您可能会强迫他们维护单独的包库,以便使用您的包来维护您规定的确切版本。

于 2012-11-07T10:12:24.843 回答