编写每个架构不同的R包

时间:2011-01-10 22:09:43

标签: r 32bit-64bit

我正在编写一个R包,您可以在其中创建网络并以不同的文件类型输出它们。我找到了包SVGRTipsDevice,它可用于创建包含工具提示和超链接的SVG图片,我非常喜欢。我把它作为输出选项之一包含在我的包中,使其不是我的包的一个重要部分,但它仍然是它的一部分(我想保留它)。

现在的问题是,此软件包仅适用于32位用户。因为我的软件包依赖于它,64位用户无法安装它。似乎我要么必须使我的软件包仅限32位或删除SVG功能(目前我选择后者上传到CRAN,并在我的网站上链接到完整的软件包)。

有没有办法以不同的方式做到这一点?比如让任何人都可以安装软件包,只是为32位用户提供SVG功能吗?

3 个答案:

答案 0 :(得分:6)

我能想到的最简单的方法是检查Sys.info()机器类型:

所以在我的机器上:

 Sys.info()["machine"]
 machine 
"x86_64" 

编辑我相信它告诉我们硬件的架构,而不是R是32位还是64位。因此,如果用户拥有64位硬件且运行32位R,则上述代码仍会返回x86_64正如Sacha指出的那样,更好的解决方案是运行:

R.Version()$arch
[1] "x86_64"

所以你可以看到我正在运行64位操作系统而且我正在运行64位版本的R。

答案 1 :(得分:4)

您的软件包的DESCRIPTION文件的Suggests:或Enhances:字段中列出的软件包不需要安装在用户的系统上以便安装软件包,因此32/64位用户可以安装软件包。您可以ok <- suppressWarnings(require(SVGToolTips))),可能在.onLoad或类似情况下,而不是测试位数。

答案 2 :(得分:0)

您可以使用额外的功能制作packagename-32bit软件包。