全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2603 3
2016-03-23
我们经常听到一些人谈论R语言的效率问题,又经常听到另一些人评论说这种比较是建筑在“naive”的R语言编程方法上的。如果R语言发挥到极致(仅限于我的能力范围之内),到底能优化到什么程度,这是我在本文希望讨论的问题。

在此之前,再次感谢Iris2126同学,是他的《【R】提升R代码运算效率的11个实用方法》让我得以展开今天的讨论,现在我还经常看会该篇文章,每每都有些收获。

今天我们延续该文的讨论,但比较的是三种最有效率的方法:C++(Rcpp)、最简向量化、和data.table格式,这三种上面文章中都有提到过,但是都不是最优化的,我根据英文原帖的跟帖高手中一些思路照搬过来了(代码非原创,荣誉归于这两位外国高手)。

1、问题的提出,假设有这么一个data.frame:
复制代码
然后,判断该数据框(df)的每一行的总和是否大于4,如果该条件满足,则对应的新变量数值为’greater_than_4’,否则赋值为’lesser_than_4’。就是这么个简单的问题。

2、a)Rcpp包加载C++函数:(原帖中的C++代码无法运行,且判断语句不知所云,很可能有错漏,我恶补了Rcpp的知识后稍微改动过,可能是比较低效率的代码,请大神指正)
复制代码

b)将向量化做到极致:
复制代码

c)用大名鼎鼎的data.table数据结构(返回的是增加了一列的data.table,而非上两种方式中的向量)
复制代码

3、OK,万事俱备,开始测试:
复制代码

4、结果。在揭晓之前,我们来猜猜谁最快?C++?

结果.PNG

当然,反正都很快就是了,不过,强中自有强中手,想不到极致向量化的方法比C++更快,而data.table又比极致向量化更快。

具体耗时可能因电脑不同而异,我在两台32位的老电脑上测试过,均是相同的快慢顺序。

5、结论——R语言的潜力我们还根本没有挖掘彻底!静下心来,好好学习吧。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-3-23 23:15:57
机制向量那个版本根本就是天书。代码写成这样自己过一会都会忘了干嘛了。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-3-25 22:57:45
cheetahfly 发表于 2016-3-23 22:52
我们经常听到一些人谈论R语言的效率问题,又经常听到另一些人评论说这种比较是建筑在“naive”的R语言编程方 ...
学习了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-5-4 22:46:05
感谢,虽然关于C++的内容丝毫看不懂,但是data.table的运行速度是最快的这一结论对于我这种菜鸟的帮助已经极大了。感谢版主的测试和分享
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群