编写每个架构不同的R包

Sac*_*amp 5 r 32bit-64bit

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

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

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

JD *_*ong 6

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

所以在我的机器上:

 Sys.info()["machine"]
 machine 
"x86_64" 
Run Code Online (Sandbox Code Playgroud)

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

R.Version()$arch
[1] "x86_64"
Run Code Online (Sandbox Code Playgroud)

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


Mar*_*gan 4

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