当我使用R data.table(fread)
读取dat
文件(3GB)时,会出现以下问题:
在3169933线的早些时候停了下来。预计有136个字段,但发现138个。比如fill=TRUE和comment.char=。第一次丢弃的非空行:
我的代码:
library(data.table)
file_path = 'data.dat' # 3GB
fread(file_path,fill=TRUE)
问题是我的文件有大约500万行。详细情况:
由于此错误,fread()
只将我的文件读取到第3169933行。在这种情况下,fill = TRUE
没有提供帮助。有人能帮我吗?
R版本: 3.6.3 data.table版本: 1.13.2
请注意本例中的fill=TRUE:
案例1- -如果我的文件第1部分(50%的行)有138个列,第2部分有136个列,那么fill=TRUE将有所帮助(它将用NA填充第2部分的两列)。
案例2- -如果我的文件第1部分(50%行)有136列,第2部分有138列,那么fill =TRUE在这种情况下不会有帮助。
发布于 2020-11-15 06:04:32
不知道为什么你仍然有问题,即使与fill=T
.但是,如果没有任何帮助,你可以试着玩这样的东西:
tryCatch(
expr = {dt1 <<- fread(file_path)},
warning = function(w){
cat('Warning: ', w$message, '\n\n');
n_line <- as.numeric(gsub('Stopped early on line (\\d+)\\..*','\\1',w$message))
if (!is.na(n_line)) {
cat('Found ', n_line,'\n')
dt1_part1 <- fread(file_path, nrows=n_line)
dt1_part2 <- fread(file_path, skip=n_line)
dt1 <<- rbind(dt1_part1, dt1_part2, fill=T)
}
},
finally = cat("\nFinished. \n")
);
tryCatch()
构造捕获警告消息,因此您可以提取行号并相应地处理它。
发布于 2020-11-15 04:15:06
尝试分别阅读它们,在为第一部分创建两个额外的列之后,将它们组合起来。
first_part = fread('data.dat', nrows = 3169933) %>%
mutate(extra_1 = NA, extra_2 = NA)
second_part = fread('data.dat', skip = 3169933)
df = bind_rows(first_part, second_part)
https://stackoverflow.com/questions/64840482
复制相似问题