R:如何在没有 RAM 限制的情况下快速读取大型 .dta 文件

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 来处理该文件。

E. *_*ish 5

在 R 中加载大型 Stata 数据集的最快方法是使用该readstata13包。我在这篇文章中foreign比较了、readstata13haven包在大型数据集上的性能,结果反复表明这是在 R 中读取 Stata 数据集的最快可用包。readstata13


Jua*_*ano 5

由于这篇文章位于搜索结果的顶部,因此我对当前版本的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)