经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » R语言 » 查看文章
data.table包使用应该注意的一些细节
来源:cnblogs  作者:ywliao  时间:2018/9/25 20:21:22  对本文有异议

fread中nThread 参数的使用

??注意默认nThread=getDTthreads(),即使用所有能用的核心,但并不是核心用的越多越好,本人亲自测试的情况下,其实单核具有较强的性能,只有在数据大于3Gb的情况下,开启11核(我的机器全部核心30多核)效率才比一个核心更高,而默认使用全部的核心效率一直非常低。因此对于不是非常巨大的文件,建议设置为1,不要使用全部核心

fread中sep是自动检测的

??所以在循环读入文件的过程中,就算不同文件的分隔符不同,也可以循环一次性方便的读入; 还有就算后续改变了文件的分隔符,文件也可以读入,建议不加分隔符

fread可以自动检测注释,并且跳过注释行

??默认skip=0,会跳过不规则的行,因此有注释行时,可以走默认的skip参数

转换成矩阵时可以保留某一列为rowname

??as.matrix作用于data.table时会调用as.matrix.data.table,有一个rownames参数可以指定保留为行名的列

矩阵转换成data.table时可以保留列名

??在as.data.table函数中同样有一个rownames参数,设置为T可以将行名保留下来作为data.table的一列

不建议set和for循环一起使用

??虽然set可以在内存上直接改变数值,但在R中用for循环比批量列运算慢的多,因此首选:=或者apply等

在处理浮点数时会有一些准确性的问题

??比如用seq函数numeric类型的数值时,会存在不准确的问题,比如seq(0,1,by=0.2)中的0.6就不等于0.6, 虽然很费解,但这是因为计算机在存储浮点数时出现的一些问题。现在只发现seq函数会出现这种情况,manual中提供了一个函数解决这个问题,setNumericRounding(2) ,去除最后两个字节,这样运行的更快,也不会出现0.6不等于0.6的问题

支持数据框取交集和并集

??类似于集合运算,data.table中fintersect, fsetdiff, funion,fsetequal函数能对不同数据框的行求交集,差集,并集等

可以直接对列按分隔符进行分割

??应用tstrsplit函数可以将一列按照分隔符分成多列,函数返回的是一个列表,举例:DT[, c("c1", "c2") := tstrsplit(x, "/", fixed=TRUE)][],将x列按照/分隔,分割成c1,c2两列

支持类似于SQLs的分组运算

??带有rollup, cube, groupingsets函数

参考资料

data.table 1.11.2 manual:https://cran.r-project.org/web/packages/data.table/data.table.pdf

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号