本节书摘来自华章出版社《R语言数据分析》一书中的第1章,第1.2节,作者盖尔盖伊·道罗齐(Gergely Daróczi),潘怡 译,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
1.2 文本文件编译测试平台
从平面文件处理和导入一定规模的数据集到R还可以使用data.table包。该开发包语法格式与传统基于S的R语言不同,它也拥有大量的参考文档、页面以及针对各类数据库行为设计的令人印象深刻的优化操作的案例。我们将在本书第3章以及第4章中讨论类似应用和案例。
它提供了一个经用户优化后的R函数来处理文本文件:
相对之前的样例,数据的导入速度非常快,算法的处理结果存放在特定的data.table类中,如果有必要可以将其转换成传统的data.frame类型:
或者使用setDF函数,该函数也提供了非常快速和恰当的对象转换方法,这种转换并不需要将数据先复制到内存中。同样,也需要注意:
以上操作意味着data.table对象可以被当作data.frame类型并采用传统方式对其进行处理。保持导入的数据格式不变还是将其转换为data.frame类型要依据之后具体操作要求而确定。数据的聚集、合并和重构使用data.table格式的对象,其操作速度要比使用数据框这一标准的R数据格式更快。另外,用户也需要了解data.table的数据格式语法,例如,DT[i, j, by]表示告诉R“用i来选出行的子集,并计算通过by来分组的j”,我们将在第3章讨论相关语法。
现在,让我们比较一下之前提到的这些数据导入方法,到底它们有多快?最终的赢家看起来应该是data.table包中的fread函数。我们将通过设计下列测试函数来确定一些待测试的方法:
现在,为了节约一些时间,我们将以上这些函数各运行10次,而不是像之前进行数百次的迭代操作:
然后,按规定字体大小输出测试结果:
注意,这里我们处理的数据集大小都没超过实际物理内存,其中一些开发包被设计为能够处理大规模的数据集。这意味着,如果对read.table进行优化,能够获得比默认配置更好的处理性能。因此,如果要快速导入规模合适的数据集,推荐使用data.table包。