登录
首页精彩阅读用C语言为R语言写扩展模块的几点体会
用C语言为R语言写扩展模块的几点体会
2018-06-27
收藏

用C语言为R语言写扩展模块的几点体会

1. 由于R是向量语言,所用简单变量均为向量,所以参数传递时均是传递的指针。矩阵也可当成向量来处理,不过是一列接一列,是一长向量。

2. 尽量用 R 的函数 R_alloc 来申请内存,这样R将能自动回收,不必自己去 free。
3. 最好使用 R_CMethodDef cMethods[] 和 R_init_myLib(DllInfo *info) 登记C函数。
4. 在NAMESPACE文件中加入两行:

exportPattern("^[^\\.]")

useDynLib(DLL_name) 
第一行输出所有不是以'.'开头的函数名;
第二行中动态包不用扩展名(.so 或 .dll),这样,在R包中通过 library.dynam(“DLL_name”, “package_name“) 装入动态库后,就可以直接使用C扩展函数了,否则,在 library(package_name)之后,还必须动态装入 (dyn.load)DLL才行。

5. 用 R CMD SHLIB 可以编译产生动态库。打包则为:
Linux下:
    R CMD build project_dir
windows下,需要先安装编译环境。可用 Rtools (http://www.murdoch-sutherland.com/Rtools/)来安装。还可安装微软的htmlhelp.exe。然后运行命令:
    Rcmd build --force --binary project_dir


数据分析咨询请扫描二维码

客服在线
立即咨询