为不同平台开发R包

Develop R package for different platform

我使用 Rcpp 开发了一个包,cpp 包括 "windows.h" 库,但是这个包在 Linux 上不可用,所以我决定使用 reticulate 包来调用 [=24] 来实现相同的功能=] 包,我应该如何让包检测安装在哪个平台上? 如果在 Windows 平台上,安装我的包将编译 cpp 文件,如果在 Linux 上,安装我的包将不会编译 cpp 文件,而是使用我的 r 代码。 例如:

Windows:

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

还要避免编译src文件夹下的cpp文件,否则会报错:"no windows.h library"

Linux:

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

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

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

在C/C++

使用 #define 测试,例如 #if defined(_WIN32) 来括起 #include <windows> 以及您的函数主体。只是 return 例如,在其他平台上什么都没有。

许多 包根据它们所在的平台做事。随时查看现有资源——CRAN 有超过 12k,GitHub 也是宝库。