Я пытаюсь преобразовать большой фрейм данных в 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