Конвертировать большой фрейм данных R в dgcmatrix - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь преобразовать большой фрейм данных в dgcmatrix в R. Но не удается из-за необоснованных требований к памяти.

library(Matrix)
dim(my_df)
[1]  22865 442010
# Convert to regular matrix
my.M <- as.matrix(my_df)

class(my.M)
[1] "matrix"

для моделирования аналогичной матрицы (имена строк и столбцов важны для сохранить) [обновлено на основе комментария, Внимание: нужно ~ 80 ГБ ОЗУ]

my.M <- replicate(n = 442010, expr = abs(rnorm(n = 22865, mean = 0, sd = 1)))
#object.size(my.M)
#80852469416 bytes
colnames(my.M) <- c(paste("IncidentBarcode_XXXX",seq(1:ncol(my.M)),sep=""))
rownames(my.M) <- c(paste("group",seq(1:nrow(my.M)),sep=""))
sparse.M <- Matrix(my.M, sparse = T )
Error in (if (is.logical(from)) .m2lgC else .m2dgC)(from) : 
  'Realloc' could not re-allocate memory (18446744072179369984 bytes)
dgc.Matrix <- as(my.M, "dgCMatrix")
Error in asMethod(object) : 
  'Realloc' could not re-allocate memory (18446744072179369984 bytes)

Я также пробовал предыдущие методы (как @priya упоминается в комментариях)

dgr.Matrix <- as(my.M, "dgRMatrix") 

 *** caught segfault ***
address 0x7ed8fe848868, cause 'memory not mapped'
matSparse <- sparseMatrix(
+   i = rownames(my_df), 
+   j = colnames(my_df), 
+   dims = c(nrow(my_df), ncol(my_df)), 
+   dimnames = list(rownames(my_df),  colnames(my_df))
+ )
Error in i + !(m.i || i1) : non-numeric argument to binary operator
...