为不同平台开发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 也是宝库。
我使用 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 也是宝库。