计算快行意味着

时间:2018-05-12 20:50:39

标签: r optimization datatable

我正在尝试计算大数据表中的行均值,例如

set.seed(1)
DT <- data.table(a = rnorm(4000000), b = rnorm(4000000), c = rnorm(4000000), 
                 d = rnorm(4000000), e = rnorm(4000000))

它还包含随机NA和许多具有完整NA的行(我不知道如何在上面的示例中随机插入这些内容)。

我使用以下代码来计算行总和:

DT[,sums:= rowMeans(.SD,na.rm=T)]

但这需要几分钟。 有没有办法优化这个代码/比rowMeans更快的解决方案?

1 个答案:

答案 0 :(得分:0)

关于@Seymour评论和我的。

比较data.table和matrix:

require(rbenchmark)
require(data.table)

#Sample data
  set.seed(1)
  DT_df <- data.table(a = rnorm(4000000), b = rnorm(4000000), c = rnorm(4000000), 
                   d = rnorm(4000000), e = rnorm(4000000))
  set.seed(1)
  DT_Matrix <- matrix(rexp(2e+07, rate=.1), ncol=5)

#Benchmark
    benchmark("data.table" = {
    DT_df[,sums:= rowMeans(.SD,na.rm=T)]
  },
  "Matrix" = {
    cbind(DT_Matrix, rowMeans(DT_Matrix, na.rm=T))
    },
  replications = 1000,
  columns = c("test", "replications", "elapsed",
              "relative", "user.self", "sys.self")) 

结果:

        test replications elapsed relative user.self sys.self
1 data.table         1000  264.30    1.146    254.08     7.78
2     Matrix         1000  230.64    1.000    213.72    16.29