我正在研究将一个R脚本转换成C代码,以提高速度并使其能够打包为.exe文件。我的C语言经验很少。
我的问题是,用C语言会显著提高速度吗?速度瓶颈是需要在大量向量上应用的排序算法。我不确定R中的向量化功能是否会有所帮助或者减慢速度。此外,我已经了解到,在R中使用for循环效率低下。
如果我应该使用C语言来实现,有什么库可以帮助我模拟R中的一些数据处理函数,例如基本的矩阵操作?我应该从哪里开始学习?现在我甚至不知道如何将数据读入C语言(逗号分隔文本文件)。
我正在研究将一个R脚本转换成C代码,以提高速度并使其能够打包为.exe文件。我的C语言经验很少。
我的问题是,用C语言会显著提高速度吗?速度瓶颈是需要在大量向量上应用的排序算法。我不确定R中的向量化功能是否会有所帮助或者减慢速度。此外,我已经了解到,在R中使用for循环效率低下。
如果我应该使用C语言来实现,有什么库可以帮助我模拟R中的一些数据处理函数,例如基本的矩阵操作?我应该从哪里开始学习?现在我甚至不知道如何将数据读入C语言(逗号分隔文本文件)。
我会尽力回答这个问题。
......但你并没有问到更相关的问题:R算法在R中能否变得更快?这里的答案通常是“可以”。它是否足够“快”?这是不可能回答的,除非尝试(并查看当前的R代码)。
问:我的R算法在C中会更快吗?
答:是的!如果你为该算法编写“最好”的C代码,它很可能会更快。但这很可能也需要进行很多更多的工作。
问:使用C是否可以更快地排序大型向量?
答:是的。使用多线程,你可以显著提高速度。......但首先在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中基本库更快的库(你也可以在R中使用其中一些库来提高性能!)。
另一种方法是从R调用.C函数,然后从那里就可以访问所有R的功能! inline
包和Rcpp
包可以帮助简化过程。
第三种方法是将R嵌入到你的应用程序中。 Rinside
可以帮助简化该过程。
问:如何将CSV数据读入C?
答:查看fopen
和fscanf
函数。...并使用它们编写一个数据导入函数。