首页 > 解决方案 > fread 函数中“强制引入的 NA”的警告

问题描述

我正在尝试fread()读取包含 2 列(x,y)和约 3 亿行(62 GB)的表,并在散点图中绘制 x 和 y。我正在使用“fread”,如果我只使用一小部分数据,比如 30000 行,它就可以正常工作。

但是,如果我在整个数据集上运行它,我得到:
“警告消息:在 setattr(ans, "row.names", .set_row_names(nr)) 中:NAs 由强制引入整数范围 /var/spool/torque/ mom_priv/jobs/11244921.cri16sc001.SC:第 14 行:70765 杀死 Rscript 10_plotZ0Z1.R"

可能是什么原因?

标签: rdata.tablelarge-datalarge-filesfread

解决方案


您可以按照评论中的建议对您的大文件进行采样。不幸的是,似乎fread还没有实现这样的功能 - 请参阅这个未解决的问题(支持该功能可以激励开发人员致力于它)。但正如这里提到的,如果你在 Linux 上,那么试试shuf -nshell 命令:

library(data.table)

# Generate some random data
dt <- data.table(x = rnorm(10^6), y = rnorm(10^6))
# write to csv file
fwrite(dt, "test-dt.csv")

# Read a random sample of 10^5 rows
dt2 <- fread(cmd = "shuf -n 100000 test-dt.csv")
dt[, plot(x,y)]

或者,您可以通过多次调用来从文件中读取行块,如此fread所示。


推荐阅读