【问题标题】:read_table() from readr package in R来自 R 中的 readr 包的 read_table()
【发布时间】:2015-08-21 06:29:31
【问题描述】:

我目前正在尝试对一些大型数据文件使用 readr 包中的 read_table() 函数。我只想要第二列,所以我在函数中使用这个参数将所有其他列设置为 NULL:

col_types = c(paste("_", "c", paste(rep("_", 20000), sep = "", collapse = ""), sep = "", collapse  = ""))

编辑: 在上面的代码中,第一对和第三对闭引号之间应该有一个下划线。

然而,read_table 似乎坚持读入整个数据文件(并使用过多的内存并导致崩溃),而不是仅仅读入第 2 列。

对于read.table(),我尝试了一个类似的论点:colClasses = c("NULL", "character", rep("NULL", 20000),它可以完美地工作而不会占用过多的内存,但我想使用read_table,因为它应该更快。关于为什么read_table 占用这么多内存的任何想法,即使我包含一个只保留一列的论点?

【问题讨论】:

    标签: r readr


    【解决方案1】:

    如果只想读取大数据文件的第二列,也可以使用data.table package中的fread函数。 fread 函数也是为(非常)快速的文件读取而开发的。

    fread 有一个select 参数,您可以使用它来确定要加载哪些列。在你的情况下,它会是这样的:

    dt <- fread("name_of_file.csv", select=2)
    

    这只会选择第二列。你也可以给它一个列向量:

    dt <- fread("name_of_file.csv", select=c(2,5,10))
    

    或列名的向量:

    dt <- fread("name_of_file.csv", select=c("id","time"))
    

    【讨论】:

    • 我肯定更喜欢 fread() 函数,但不幸的是,这个函数会导致我收到一条错误消息:embedded nul in string 'àáõ“Ô\003\0IÏøá4ÔZM2Ì'
    • @user2205537 你能给出完整的错误信息(包括你正在使用的命令)吗?
    • 没关系!问题解决了!这是与 fread() 不兼容的 .gz 压缩文件格式。感谢您的帮助!
    • @user2205537 这确实是不可能的。但是,这样的feature will be incorporated in the future
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-28
    • 2017-04-18
    • 2018-03-30
    • 2022-08-14
    • 2021-04-24
    • 1970-01-01
    • 2021-05-11
    相关资源
    最近更新 更多