对于我编写的代码,我倾向于明确而非隐含。因此,在设法创建自己的软件包之后,我立即想到的另一件事是如何最好地确保代码的健壮性和可靠性。部分原因与我的包依赖的包有关。
在这方面:是否可以明确说明需要/期望哪个版本的包依赖?
我正在寻找不需要说明zip
文件的实际路径的方法(这当然很容易实现),但只需使用install.packages
“标准行为“指明包名称仅(可能带有一些所需版本的参考)。
我已经检查Writing R Extensions以查看我对Depends
文件的DESCRIPTION
部分的选项,希望有类似的机制用于说明所需的R版本(例如R (>= 2.15.2)
)。但我没有找到任何类似的包依赖:
'Depends'字段给出了这个包所依赖的逗号分隔的包名列表。包名称后面可以选择括号中的注释。注释应包含比较运算符,空格和有效的版本号。
如果您的包依赖于特定版本的R,您也可以使用特殊包名“R” - 例如,如果包仅适用于R版本2.11.0或更高版本,则包括'R(> = 2.11)。 0)'在'取决于'字段中。您还可以要求某个SVN版本用于R-devel或R-patched,例如: 'R(> = 2.14.0),R(> = r56550)'需要晚于2011年7月下旬的R-devel的版本(包括2.14.0的发布版本)。库和R包检查工具都使用此字段:因此,使用不正确的语法或滥用“取决于”字段对可能需要的其他软件的注释是错误的。其他依赖项(R系统外部)应列在“SystemRequirements”字段中,可能在单独的README文件中放大。
R INSTALL工具检查所使用的R版本是否足够用于正在安装的软件包,并且在调用库时,将在当前软件包之前附加指定的软件包列表(在检查版本要求之后)并且在安装期间准备延迟加载时。
然后我也看了一下install.packages
并希望得到像version
这样的论点,但我想没有。
我完全清楚我的问题的目标可能与R的分布和安装包的理念形成对比,CRAN包存储库(至少我猜)某些软件包的新版本只是“否决”以前的版本和{{1}总是拿起最新的可用的。从最终用户隐藏版本特性也是非常有意义的,以免造成过于复杂的事情。
然而,关于尽可能编写强健代码的目标,恕我直言,明确说明事情也是有意义的。或者至少可以选择这样做。
答案 0 :(得分:8)
您使用Depends
。例如:
Depends: R (>= 2.15.0), foo (== 1.17-12)
会对包foo
上等于1.17-12
的大于或等于2.15.0 和的R版本产生依赖关系。
(至少如果我理解正确的话,您要明确说明您的软件包仅包 foo 的版本x.yy-zz
。)
我不确定这对最终用户有多大帮助;您可能会强迫他们维护单独的软件包库,以便使用您的软件包来维护您规定的确切版本。