R Merging Help - невозможно выделить вектор размером 215,2 Мб - PullRequest
0 голосов
/ 29 августа 2018

Я получаю сообщение:

cannot allocate vector of size 215.2 Mb

215.2 не кажется мне таким уж большим, особенно когда примеры, которые я видел, были в стратосфере 10 Гб.

Вот что я пытаюсь сделать:

Combined<-merge(x=SubjectsYOY,y=o2017,by="subjectkey",all.x=TRUE)

Итак, довольно простое левое соединение.

SubjectsYOY имеет 28 202 411 записей с 16 столбцами. o2017 имеет 109 850 записей с 94 столбцами.

Мне также нужно сделать очень похожие слияния еще три раза после того, как я это сделаю.

Я пытался очень сильно уменьшить нагрузку на память, сохраняя объекты в файле .rda на моей машине, закрывая R, а затем загружая .rda в первую очередь. Очевидно, не сработало. Кроме того, пытаясь избежать удаления столбцов - возможно, есть более щадящая команда вместо слияния при работе с таким количеством записей?

Кроме того, поможет ли сортировка по размеру двух информационных фреймов по ключу субъекта заблаговременно?

У меня в память загружено пять фреймов данных, пока я пытаюсь это сделать. Ниже приводится некоторая информация по сеансу о том, что происходит с моим компьютером:

sessionInfo()

R version 3.4.3 (2017-11-30)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    
attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     
loaded via a namespace (and not attached):
[1] compiler_3.4.3 plyr_1.8.4     tools_3.4.3    yaml_2.2.0     Rcpp_0.12.17

Хвостовая часть следует:

Итак, я провел некоторые эксперименты и посмотрел на предел памяти.

memory.limit()

Он автоматически устанавливается на 32676.

Теперь я изменил его следующим образом:

memory.limit(326760+10000)

И мое первое большое слияние работает!

Теперь у меня есть еще 3 слияния. Следующий - o2018, и он снова содержит 94 уникальных и новых столбца, которые необходимо добавить к тому, что было создано ранее: 16 + 94, а теперь + 94 столбца. Это много!

Итак, я снова экспериментировал с изменением лимита памяти, не разбираясь в управлении памятью:

memory.limit(32676000+10000)

Обратите внимание на два дополнительных нуля. Но теперь я снова получаю ту же исходную ошибку.

Кто-нибудь думает, что объединение этих множественных слияний в одно поможет? Какой код для этого? Это лучший код или я должен попытаться эмулировать запуск SQL или что-то еще? Неважно, что это должно произойти.

Еще раз спасибо!

1 Ответ

0 голосов
/ 29 августа 2018

Однажды я столкнулся с подобной ситуацией, и это было вызвано слиянием текстов с факторами. Я решил это, превратив факторы в персонажей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...