Есть ли в R поддержка больших разреженных матриц? В настоящее время я имею дело с разреженной квадратной матрицей 1,9M с плотностью около 0.001
.
Я хотел протестировать создание этой матрицы в R на моем AWS спотовом экземпляре с памятью 480 ГБ.
library(Matrix)
DIMS = as.numeric(1988463)
DENSITY = as.numeric(0.001)
VALS = as.numeric(DIMS*DIMS*DENSITY)
i <- sample(DIMS, VALS, replace = TRUE)
j <- sample(DIMS, VALS, replace = TRUE)
x <- rpois(VALS, 10)
sp_matrix <- sparseMatrix(i = i,
j = j,
x = as.numeric(x),
dims=list(DIMS, DIMS))
Однако я получаю эту ошибку.
Error in validityMethod(as(object, superClass)): long vectors not supported yet: ../../src/include/Rinlinedfuns.h:522
Traceback:
1. system.time(sp_matrix <- sparseMatrix(i = i, j = j, x = as.numeric(x),
. dims = list(DIMS, DIMS)))
2. sparseMatrix(i = i, j = j, x = as.numeric(x), dims = list(DIMS,
. DIMS))
3. validObject(r)
4. anyStrings(validityMethod(as(object, superClass)))
5. isTRUE(x)
6. validityMethod(as(object, superClass))
Timing stopped at: 76.42 73.41 151
Есть ли какой-либо пакет или обходной путь для этой проблемы? В конце концов, я буду использовать пакет reticulate
для загрузки разреженной csr
матрицы из numpy
, чтобы воспользоваться преимуществами более быстрого и эффективного с точки зрения памяти пакета text2vec
для беговой перчатки, который требует, чтобы данные были в формате dgCMatrix
.
Изменить
Я также пробовал spam
со следующими строками кода для имитации большой и разреженной матрицы.
library(spam)
test_matrix <- spam_random(nrow = 1900000, ncol = 1900000, density = 0.001)
Он будет работать со следующим предупреждением:
Warning message in spam_random(nrow = 1900000, ncol = 1900000, density = 0.001):
"integer overflow in 'cumsum'; use 'cumsum(as.numeric(.))'"
, пока не истечет время ожидания со следующим сообщением об ошибке:
Error in if (rowp[i] == rowp[i + 1L]) next: missing value where TRUE/FALSE needed
Traceback:
1. system.time(test_matrix <- spam_random(nrow = 1900000, ncol = 1900000,
. density = 0.001))
2. spam_random(nrow = 1900000, ncol = 1900000, density = 0.001)
Timing stopped at: 1657 228.3 1903