Que*_*wer 8 memory r large-files stata
我有一个 10 GB .dta Stata 文件,我正在尝试将其读入 64 位 R 3.3.1。我正在使用大约 130 GB RAM(4 TB HD)的虚拟机,.dta 文件大约有 300 万行和 400 到 800 个变量。
我知道 data.table() 是读取 .txt 和 .csv 文件的最快方法,但是有人建议将大型 .dta 文件读取到 R 中吗?将文件作为 .dta 文件读入 Stata 需要大约 20-30 秒,尽管我需要在打开文件之前设置工作内存最大值(我将最大值设置为 100 GB)。
我没有尝试过在 Stata 中导入 .csv,但我希望避免使用 Stata 接触该文件。通过使用 memisc 将 stata .dta 文件导入 R找到了解决方案,但这假设 RAM 稀缺。就我而言,我应该有足够的 RAM 来处理该文件。
由于这篇文章位于搜索结果的顶部,因此我对当前版本的haven和重新运行了基准测试readstata13。看来这两个包在这一点上具有可比性,并且haven稍好一些。就时间复杂度而言,它们都近似线性为行数的函数。
这是运行基准测试的代码:
sizes <- 10^(seq(2, 7, .5))
benchmark_read <- function(n_rows){
start_t_haven <- Sys.time()
maisanta_dataset <- read_dta("my_large_file.dta"), n_max = n_rows)
end_t_haven <- Sys.time()
start_t_readstata13 <- Sys.time()
maisanta_dataset <- read.dta13("my_large_file.dta", select.rows = n_rows)
end_t_readstata13 <- Sys.time()
tibble(size = n_rows,
haven_time = end_t_haven - start_t_haven,
readstata13_time = end_t_readstata13 - start_t_readstata13) %>%
return()
}
benchmark_results <-
lapply(sizes, benchmark_read) %>%
bind_rows()
Run Code Online (Sandbox Code Playgroud)