为什么read.csv这么慢?
浏览stackoverflow上的问题很长一段时间,发现许多有用的答案,我终于发现了一些我找不到答案的问题。当我遇到一个我可以有意义地贡献的问题时(也许是另一天),我也该开始向社区回馈了 不管怎样,我的第一个问题,所以请对我温柔一点: 我很清楚R中的read.csv函数绝不是读取中数据的最有效方式,许多问题和答案都涉及到read.csv的替代方案,但这个问题的重点略有不同,我想确实有两个问题需要回答为什么read.csv这么慢?,r,csv,R,Csv,浏览stackoverflow上的问题很长一段时间,发现许多有用的答案,我终于发现了一些我找不到答案的问题。当我遇到一个我可以有意义地贡献的问题时(也许是另一天),我也该开始向社区回馈了 不管怎样,我的第一个问题,所以请对我温柔一点: 我很清楚R中的read.csv函数绝不是读取中数据的最有效方式,许多问题和答案都涉及到read.csv的替代方案,但这个问题的重点略有不同,我想确实有两个问题需要回答 我想知道的是为什么read.csv这么慢?导致其性能不佳的管理费用是什么 此外,我还拥有许多可以
bm_io = function (runs = 3, n = 1e6, ncol = 1000) {
set.seed(1)
on.exit(set.seed(NULL))
x = rnorm(n)
m = data.frame(matrix(x, ncol = ncol))
timings = data.frame(user = numeric(2 * runs), system = 0,
elapsed = 0, test = c("write", "read"))
for (i in 1:runs) {
fname = tempfile(fileext = ".csv")
fname = "temp.csv"
invisible(gc())
timings[2 * i - 1, 1:3] = system.time({
write.csv(m, fname, row.names = FALSE)
})[1:3]
timings[2 * i, 1:3] = system.time({
read.csv(fname)
})[1:3]
unlink(fname)
}
timings
}
如果有人对此有任何想法或评论,我将不胜感激。此外,如果我错过了类似的问题,请随时为我指出正确的方向。非常感谢一个显著的性能提升是参数
colClasses
。性能提升通常是两个因素
我在读取大型csv文件的代码中通常执行以下步骤:
- 使用
nrows
- 从读取数据帧的列中提取类
- 使用
colClasses
- 如果由于不可预见的数据导致此操作失败,则使用整个数据,而不使用
colClasses
read.csv
有许多参数可以提高性能。尽管没有一个能从data.table
包中接近fread
。我的问题更多的是关于是什么原因使得read.csv
与一些备选方案相比速度如此之慢,以及为什么我在从SSD或HDD读取时没有看到预期的差异。