出于速度原因以及将其打包为 .exe 的能力,我正在考虑将 R 脚本转换为 C 代码。我是 C 新手。
我的问题是用 C 语言会明显更快吗?速率限制步骤是一种必须对大向量多次应用的排序算法。我不确定 R 中的矢量化功能是否会对此有所帮助或减慢速度。我还读到,R 中的 for 循环效率低下。
如果我应该用 C 语言执行此操作,哪些库可以帮助我模仿 R 的一些数据处理功能(例如基本矩阵操作)?我应该从哪里开始?现在我什至不知道如何将我的数据读入C(逗号分隔的文本文件)。
我会尽力回答这个问题。
...但是你没有问的问题可能更相关:R 算法可以在 R 中变得更快吗?这里的答案通常是“是”。能“够快”吗?好吧,如果不尝试(并查看当前的 R 代码),这是不可能回答的。
问:我的 R 算法在 C 中会更快吗?
答:是的!如果您为该算法编写“最佳”C 代码,它很可能会更快。它也很可能是a lot为此还要做更多的工作。
问:用 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)
问:哪些库模仿基本 R 函数?
答:LAPACK/BLAS 在 R 中处理矩阵数学。如果这就是您所需要的,您可以找到比 R 中的普通库快得多的库(您也可以在 R 中使用其中一些库来提高性能!)。
有关 BLAS 的更多信息 http://en.wikipedia.org/wiki/Basic_Linear_Algebra_Subprograms
另一种方法是从 R 到 C 进行 .Call,然后您就可以访问 R 的所有功能!这inline
包和Rcpp
包可以让事情变得更容易。
第三种方法是将 R 嵌入到您的应用程序中。Rinside
可以帮助让这变得更容易。
问:如何将 CSV 数据读入 C 语言?
答:看看fopen
and fscanf
功能。 ...并使用它们编写数据导入函数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)