2

我目前正在尝试read_table()在一些大型数据文件上使用 readr 包中的函数。我只想要第二列,所以我在函数中使用这个参数将所有其他列设置为 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占用这么多内存的任何想法?

4

1 回答 1

4

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

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"))
于 2015-08-21T06:48:14.347 回答