我想提高我的C技能,以便更有能力将R代码转换为C,这将是有用的.人们有什么提示可以帮助我?
背景:几年前我参加了一个在线Intro to C课程,加上Writing R Extensions和S Programming(Venables&Ripley)使我能够将瓶颈操作转换为C,例如计算子矩阵的乘积(我是否重新发明了转那里?).但是我想稍微超出这个范围,例如转换更大的代码块,利用线性代数例程等.
毫无疑问,我可以从我以前使用过的资源中学到更多东西,但我想知道是否还有其他人推荐的资源?通过示例进行示例显然是了解更多信息的一种方式:Brian Ripley 在S高效编程研讨会上提供了几个从S原型转移到S + C的示例以及最近的Bioconductor研讨会高级R用于生物信息学(抱歉不能post hyperlink)包括一个编写R + C算法的实验室.更像这样,或其他建议将不胜感激.
Dir*_*tel 17
这是一个非常有趣的问题.实际上,我在转移到R之前已经学习了C和C++,这可能使我更容易将C/C++添加到R中.
但即便如此,我也是第一个说由于你需要学习的C级不同的宏和R-internals,将纯C添加到R中是非常复杂的.
这引出了我最喜欢的论点:使用额外的抽象层,如Rcpp包.它隐藏了许多令人讨厌的细节.我希望你不需要知道很多C++来使用它.使用它的包装的一个例子是小earthmovdist上R-伪造包,它使用 RCPP包装类接口一个特定的度量.
编辑1:例如,请参阅earthmovdist的主要功能,这应该很容易阅读,可能还有(短) Rcpp包装类包装手册.
编辑2:我认为C++更合适和R-like的三个快速原因:
使用Rcpp包装器类意味着您永远不必使用PROTECT和UNPROTECT,如果不映射,这是错误和堆损坏的常见原因
使用Rcpp和STL等容器类vector
意味着你永远不必显式调用malloc()
/ free()
或new
/ delete
它删除另一个常见的错误源.
Rcpp允许你将所有内容包装在C++级别的try
/ catch
blocks中,并将异常报告给R ---所以没有突然的seg.faults和程序死亡.
也就是说,选择语言是一个非常个人化的决定,许多用户当然对C和R之间的低级接口非常满意.
gap*_*ppy 14
我也在努力解决这个问题.
如果问题是改进C的命令,那么有很多关于这个主题的书籍清单.他们都是从K&R开始的.我喜欢P. van der Linden的"Expert C Programming"和S. Prata的"C primer".对C标准库的任何引用都有效.
如果问题是接口C到R,除了前面提到的官方R文件,你可以看看这个哈佛课程,以及这个快速入门指南.我只将标量和数组传递给C,老实说,我不知道如何连接复杂的数据结构.
如果问题是将C++与R接口,或者构建C++技能,我无法回答,因为我没有使用太多的C++.对我来说一个很好的起点是"C++核心语言"(O'Reilly).非常简单,原始,但对来自C的人有用.
我的主要建议是查看其他包.不用说,所有软件包都不使用C代码,因此您需要找到可以使用的代码.您可以从CRAN下载所有软件包的源代码,在某些情况下,您也可以在R-Forge上浏览它们. 一些R项目也在Google Code或github等网站上维护(例如,ggplot2).您将在"src"目录中找到C代码.
一般来说,考虑一下你想要完成什么,然后看看做类似事情的包.
"C编程语言"一书可能仍然是最广泛使用的,因此您可能希望在书架上使用它.以下免费书籍也是一个有用的资源:http://publications.gbdirect.co.uk/c_book/