此外,有没有人知道一些从R程序员角度来看的C语言资源?有一本名为《R编程艺术》的优秀书籍,但似乎是从已经掌握C语言的人的角度来写的。
另外,当我的C代码在Windows标准R GUI中运行时,屏幕往往会冻结。它不会崩溃;当代码运行完毕后,它会恢复正常,但它会阻止我在GUI中做其他事情。有没有人知道如何避免这种情况?我是使用.C()函数调用该函数的。
此外,有没有人知道一些从R程序员角度来看的C语言资源?有一本名为《R编程艺术》的优秀书籍,但似乎是从已经掌握C语言的人的角度来写的。
另外,当我的C代码在Windows标准R GUI中运行时,屏幕往往会冻结。它不会崩溃;当代码运行完毕后,它会恢复正常,但它会阻止我在GUI中做其他事情。有没有人知道如何避免这种情况?我是使用.C()函数调用该函数的。
他的网站上还有许多其他文章--这些文章通常比较C、Java、Python等编程语言的性能。
我也使用了Rcpp创建了一个版本--请参阅这篇博客文章。今年夏天我们还在useR会议上使用了同样的例子来比较Julia、Python和R/C++,因此您可以找到更多的例子和参考资料。MCMC被广泛使用,并且是优化速度的“低挂果”。
鉴于这些示例,我想补充一下对两位先前评论的不同看法。速度并不会相同,在这种情况下很容易做得更好,您的C/C++技能将在很大程度上决定您的提升。
最后,一个经常被忽视的方面是RNG的速度非常重要。运行循环并添加内容很便宜--做出“好”的随机抽样则不然,并且许多跨系统的变化也源自此。
我认为,如果正确使用,C语言比R语言快得多。
以下是一些简单的优化方法: 将编译器设置为更高的速度优化。 使用-march标志进行编译。 如果你使用的是VS,请确保你使用的是发布选项而不是调试选项。
R_CheckUserInterrupt
和R_ProcessEvents
。你观察到的性能差异将取决于许多因素:你正在执行的操作类型,你如何编写C代码,你使用了什么类型的编译器级别优化,你的目标CPU架构等等。
你可以编写基本的、粗糙的C代码,并获得一个能够正常工作并具有良好效率的东西。你也可以微调你的代码,以适应目标CPU的独特特性——可能会调用专门的汇编指令——并从代码中挤出每一滴性能。你甚至可以编写比R版本运行得慢得多的代码。C给了你很大的灵活性。这里的限制因素是你想要花多少时间来编写和优化C代码。
反之亦然(重复上一段,但交换“C”和“R”)。
我并不是在说话玩笑,但实际上并没有一个简单明了的答案来回答你的问题。唯一确定你的C版本会快多少的方法就是编写两种方式的代码并进行基准测试。