Объединить список матриц в big.matrix - PullRequest
0 голосов
/ 25 мая 2018

У меня есть список больших (35000 x 3) матриц в R, и я хочу объединить их в одну матрицу, но это будет около 1 миллиарда строк в длину и будет превышать максимальный размер объекта в R .

Пакет bigmemory позволяет использовать матрицы большего размера, но не отображается для поддержки rbind для объединения нескольких матриц.

IsЕсть какой-то другой пакет или метод, который поддерживает создание очень большой матрицы из меньших матриц?

Также, прежде чем вы спросите, это не проблема ОЗУ, просто ограничение R даже для 64-битной R.

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Вы можете реализовать это с помощью цикла:

library(bigmemory)

## Reproducible example
mat <- matrix(1, 50e3, 3)
l <- list(mat)
for (i in 2:100) {
  l[[i]] <- mat
}

## Solution
m <- ncol(l[[1]])  ## assuming that all have the same number of columns
n <- sum(sapply(l, nrow))

bm <- big.matrix(n, m)
offset <- 0
for (i in seq_along(l)) {
  mat_i <- l[[i]]
  n_i <- nrow(mat_i)
  ind_i <- seq_len(n_i) + offset
  bm[ind_i, ] <- mat_i
  offset <- offset + n_i
}

## Verif
stopifnot(offset == n, all(bm[, 1] == 1))
0 голосов
/ 25 мая 2018

Не совсем ответ, но немного больше, чем комментарий: вы уверены, что не можете сделать это грубой силой?R теперь имеет длинные векторы (начиная с версии 3.0.0; вопрос, на который вы ссылаетесь, относится к версии 2.14.1 R): из этой страницы ,

Массивы (включая матрицы)может быть основан на длинных векторах, при условии, что каждое из их измерений не больше 2 ^ 31 - 1: таким образом, нет одномерных длинных массивов.

, в то время как базовый атомный вектор может доходить до 2 ^ 52 -1 элементов («в теории ... пределы адресного пространства современных ЦП и ОС будут намного меньше»).Это означает, что в принципе вы должны иметь возможность создавать матрицу длиной до ((2^31)-1)/1e9 = 2,1 миллиарда строк;поскольку максимальный «длинный» размер объекта составляет около 10 ^ 15 (т. е. буквально миллионы миллиардов), матрица из 1 миллиарда строк и 3 столбцов (теоретически) не должна быть проблемой.

...