将R代码转换为C代码
我正在寻找将R脚本转换为C代码的速度原因以及将其打包为.exe的能力。 我是C.的新手
我的问题是C会明显加快吗? 速率限制步骤是一种必须在大矢量上应用很多次的排序算法。 我不确定R中的矢量化function是否有助于减慢它的速度。 另外我读过在R中for循环效率低下。
如果我应该在C中执行此操作,哪些库可以帮助我模仿R的一些数据处理function,如基本矩阵操作? 我应该从哪里开始? 现在我甚至不知道如何将我的数据读入C(逗号分隔的文本文件)。
我会尽力回答这个问题。
…但你不问的问题可能更相关:R算法可以在R中更快吗? 这里的答案通常是“是”。 可以“足够快”吗? 好吧,如果不尝试(并查看当前的R代码),这是不可能回答的。
问:我的R算法在C中会更快吗?
A:好的! 如果你为算法编写“最佳”C代码,它很可能会更快。 这样做很可能也会有很多工作要做。
问:在C中可以更快地对大矢量进行排序吗?
答:是的。 使用multithreading,您可以提高相当多的速度。 …但是首先在R中调用sort(x, method='quick')
并查看是否可以改善事情! 对于随机数据,默认方法不是很快。
x <- runif(1e7) system.time( sort(x) ) # 2.50 secs system.time( sort(x, method='quick') ) # 1.37 secs #system.time( tommysort(x) ) # 0.51 secs (4 threads)
问:哪些库模仿基本R函数?
答:LAPACK / BLAS处理R中的矩阵数学。如果这就是你所需要的,你可以找到比R中的vanilla快得多的库(你也可以在R中使用它们来提高性能!)。
有关BLAS的更多信息
另一种方法是从R到C创建.Call,从那里你可以访问R的所有function! inline
包和Rcpp
包可以帮助您更轻松。
第三种方法是在您的应用程序中嵌入R. Rinside
可以帮助您更轻松。
问:如何将CSV数据读入C?
答:看看fopen
和fscanf
函数。 ...并使用它们来编写数据导入function。