• data.table包使用应该注意的一些细节


    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

  • 相关阅读:
    properties的编码问题
    在Spring中读取properties文件
    Intellij IDEA常用配置记录
    基于Shiro的登录功能 设计思路
    在SpringMVC中操作Session、Request、Response对象
    使用MockMVC与Junit进行单体测试
    django: form fileupload
    django: form
    django: db
    django: db
  • 原文地址:https://www.cnblogs.com/ywliao/p/9141595.html
Copyright © 2020-2023  润新知