将R代码转换为C代码

将R代码转换为C代码,c,r,matrix,C,R,Matrix,我正在考虑将R脚本转换为C代码,以提高速度,并将其打包为.exe。我是C的新手 我的问题是,在C语言中,它会更快吗?速率限制步骤是一种排序算法,必须多次应用于大向量。我不确定R中的矢量化功能是否有助于实现这一点,还是会降低速度。我还读到for循环在R中效率低下 如果我在C中这样做,哪些库可以帮助我模拟R的一些数据处理函数,比如基本的矩阵操作?我应该从哪里开始?现在我甚至不知道如何将数据读入C(逗号分隔的文本文件) 我会尽力回答这个问题 …但你没有问的问题可能更相关:R算法在R中能更快吗?这里的答

我正在考虑将R脚本转换为C代码,以提高速度,并将其打包为.exe。我是C的新手

我的问题是,在C语言中,它会更快吗?速率限制步骤是一种排序算法,必须多次应用于大向量。我不确定R中的矢量化功能是否有助于实现这一点,还是会降低速度。我还读到for循环在R中效率低下


如果我在C中这样做,哪些库可以帮助我模拟R的一些数据处理函数,比如基本的矩阵操作?我应该从哪里开始?现在我甚至不知道如何将数据读入C(逗号分隔的文本文件)

我会尽力回答这个问题

…但你没有问的问题可能更相关:R算法在R中能更快吗?这里的答案通常是“是”。它能“足够快”吗?嗯,如果不尝试(并看到当前的R代码),这是不可能回答的

问:我的R算法在C语言中会更快吗

A:是的!如果您为算法编写“最佳”C代码,它很可能会更快。这很可能需要做更多的工作

问:在C语言中,大向量的排序能更快吗

A:是的。使用多线程,可以大大提高速度。。。但是首先在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)

x您希望实现什么样的加速?为什么您认为R在这些操作中会明显慢于C?你学习过吗?@Jack我不是要任何人帮我写代码。我想问的是,C脚本中的排序算法是否比R脚本中的排序算法效率更高。我认为这是一个公平的问题。我将对它进行重新措辞,使其听起来不像是我要求为我编写代码。向量上的R
sort
使用了用C实现的合理算法,因此没有太多的加速空间。也许您错误地诊断了瓶颈所在,例如,(对)大量小向量(做任何事情)?但是有一种可能的方法可以重新设计你的问题,从而减少迭代次数。在重新设计之前,没有人提到过概要文件,概要文件,概要文件。@DirkEddelbuettel:什么?为什么不花几天/几周的时间学习并用一种新语言重新实现一个算法呢?然后你可以测试在你的特定情况下它是否真的更快,然后你就可以学习一门新的语言了!好像没有更好的事可做。。。目标平台必须是Windows(.exe),并且可能是AMD64(32位已经过时,几乎没有人拥有安腾)。一个好的BLAS将使用AMD64中的AVX,这可以极大地提高代码的速度(当然,另一种选择是循环)。甚至在C语言中,德克上面的评论也适用:profile,profile,profile。感谢您的详细回复!