На веб-сайте, указанном в предыдущем вопросе, представляется, что вы хотите представить
> print(object.size(integer(10000 * 72000)), units="Mb")
2746.6 Mb
, что должно быть «просто» с 8 ГБ, на которые вы ссылаетесь в другой вопрос ,Кроме того, общая длина меньше максимальной длины вектора в R, так что это тоже должно быть в порядке.Но посмотрите конец ответа для важного предостережения!
Я создал вне R версию файла данных с разделителями табуляцией.Затем я прочитал информацию, которая меня интересовала
what <- list(User=integer(), Film=integer(), Rating=numeric(), NULL)
x <- scan(fl, what)
, и 'NULL' отбрасывает неиспользуемые данные временной метки.Записи «Пользователь» и «Фильм» не являются последовательными, и numeric()
на моей платформе занимает в два раза больше памяти, чем integer()
, поэтому я преобразовал Пользователь и Фильм в коэффициент, а Рейтинг в целое число () путем удвоения (оригинал)оценки от 1 до 5 с шагом 1/2).
x <- list(User=factor(x$User), Film=factor(x$Film),
Rating=as.integer(2 * x$Rating))
Затем я выделил матрицу
ratings <- matrix(NA_integer_ ,
nrow=length(levels(x$User)),
ncol=length(levels(x$Film)),
dimnames=list(levels(x$User), levels(x$Film)))
и использовал тот факт, что матрица из двух столбцов может использоваться дляиндекс другой матрицы
ratings[cbind(x$User, x$Film)] <- x$Rating
Это шаг, при котором использование памяти максимально.Затем я удалил бы ненужную переменную
rm(x)
Функция gc()
сообщает мне, сколько памяти я использовал ...
> gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 140609 7.6 407500 21.8 350000 18.7
Vcells 373177663 2847.2 450519582 3437.2 408329775 3115.4
... чуть более 3 Гбтак что это хорошо.
Сделав это, вы столкнетесь с серьезными проблемами.kmeans (из вашего ответа на вопросы по более раннему ответу) не будет работать с пропущенными значениями
> m = matrix(rnorm(100), 5)
> m[1,1]=NA
> kmeans(m, 2)
Error in do_one(nmeth) : NA/NaN/Inf in foreign function call (arg 1)
, и как очень грубое практическое правило, я ожидаю, что для готовых решений R требуется 3-5В разы больше памяти, чем начальный размер данных.Проработали ли вы анализ с меньшим набором данных?