我正在考虑将R脚本转换为C代码,以加快速度,并将其打包为.exe.我是C的新手.
我的问题是它会在C中明显加快吗?速率限制步骤是一种必须在大向量上应用很多次的排序算法.我不确定R中的矢量化功能是否会对此有所帮助或减慢速度.另外我读过在R中for循环效率低下.
如果我应该在C中执行此操作,哪些库可以帮助我模仿R的一些数据处理功能,如基本矩阵操作?我应该从哪里开始?现在我甚至不知道如何将我的数据读入C(逗号分隔的文本文件).
Tom*_*mmy 10
我会尽力回答这个问题.
...但你不问的问题可能更相关:R算法可以在R中更快吗?这里的答案通常是"是".可以"足够快"吗?好吧,如果不尝试(并查看当前的R代码),这是不可能回答的.
问:我的R算法在C中会更快吗?
A:是的!如果你为算法编写"最佳"C代码,它很可能会更快.这样做很可能也会有很多工作要做.
问:在C中可以更快地对大矢量进行排序吗?
答:是的.使用多线程,您可以提高速度....但是首先打电话给sort(x, method='quick')R,看看是否有所改善!对于随机数据,默认方法不是很快.
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)
Run Code Online (Sandbox Code Playgroud)
问:哪些库模仿基本R函数?
答:LAPACK/BLAS处理矩阵数学在R.如果这是你所需要的,你可以找到比在R上的香草的人快得多库(你可以使用其中的一些R中也以提高性能!).
另一种方法是从R到C创建一个.Call,从那里你可以访问所有R的功能!该inline包和Rcpp包可以帮助更容易.
第三种方法是在您的应用程序中嵌入R. Rinside可以帮助您更轻松.
问:如何将CSV数据读入C?
答:看看fopen和fscanf功能....并使用它们来编写数据导入功能.