рассчитать быстрый ряд означает - PullRequest
0 голосов
/ 12 мая 2018

Я пытаюсь вычислить средние строки в большом массиве данных, например,

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 голосов
/ 13 мая 2018

Относительно комментариев @Seymour и моих.

Сравнение таблицы данных и матрицы:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...