data.table vs bigmemory对大对象的只读访问

时间:2013-06-10 22:53:37

标签: r dataframe data.table

我有一个包含2个字符串和6个整数列的1,000,000行的大型data.frame。顺序迭代这个data.frame需要花费大量的时间,即使不修改它也是如此。这是我正在使用的基本循环:

for( i in 1:1000000 ) {
  varA = mydf[i, "varA"]
  varB = mydf[i, "varB"]
  ...
}

处理100行需要大约10秒钟,我需要通过几个1M的数据块。我不需要修改data.frame但我需要按顺序读取行(这就是为什么我选择运行for循环而不是调用apply)。

在这种情况下,您更愿意使用data.table或bigmemory对象吗?

1 个答案:

答案 0 :(得分:0)

使用data.table:

setDT(mydf)[, c('varA', 'varB')]

例如:

> mydf <- data.table(matrix(rnorm(1e8), nc = 100))# 1E6 rows
> colnames(mydf) <- paste0('var', 1:100)

使用data.table包

> head(mydf[, c('var50', 'var75')])

       var50      var75
1: 1.77199144  2.32235675
2: 0.06925491 -1.03333482
3: 0.05529698 -0.56474744
4: 0.07815707  0.06754285
5: 0.20430406 -2.31359882
6: 1.26963312 -1.18745481

机器时间:

> system.time(mydf[, c('var50', 'var75')])


user  system elapsed 
0.00    0.01    0.02