针对不同平台开发R包

时间:2018-08-21 16:41:49

标签: r rcpp r-package

我使用Rcpp开发了一个软件包,cpp包含“ windows.h”库,但是该软件包在Linux上不可用,因此我决定使用网状软件包调用python软件包来实现相同的功能,如何使软件包检测安装在哪个平台上? 如果在Windows平台上,安装我的软件包将编译cpp文件;如果在 Linux 上,安装我的软件包将不编译cpp文件,而是在内部使用我的r代码。 例如:

Windows:

myfunction<-function(){
   .Call(C++ function)
}

还要避免在src文件夹中编译cpp文件,否则会出现错误:“无windows.h库”

Linux:

myfunction<-function(){
    library(reticulate)
    import(py_package)
}

1 个答案:

答案 0 :(得分:1)

也许您可以重新考虑您的方法并在Windows以外的平台上提供C ++解决方案?简而言之,您可以执行以下操作:

在R

使用例如if (Sys.info()[["sysname"]] == "Windows")来测试Windows,然后在else分支中调用替换项

在C / C ++中

使用#define之类的#if defined(_WIN32)测试将#include <windows>以及函数的主体括起来。只需返回其他平台上的任何内容即可。

许多软件包根据其所处的平台执行操作。随意查看现有资源-CRAN的资源超过12,000,GitHub也是宝库。