Estou com problemas ao tentar usar objetos grandes em R. Por exemplo:
> memory.limit(4000)
> a = matrix(NA, 1500000, 60)
> a = matrix(NA, 2500000, 60)
> a = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb
> a = matrix(NA, 2500000, 60)
Error: cannot allocate vector of size 572.2 Mb # Can't go smaller anymore
> rm(list=ls(all=TRUE))
> a = matrix(NA, 3500000, 60) # Now it works
> b = matrix(NA, 3500000, 60)
Error: cannot allocate vector of size 801.1 Mb # But that is all there is room for
Entendo que isso esteja relacionado à dificuldade de obter blocos contíguos de memória ( daqui ):
As mensagens de erro iniciadas não podem alocar vetor de tamanho indicam uma falha na obtenção de memória, porque o tamanho excedeu o limite de espaço de endereço para um processo ou, mais provavelmente, porque o sistema não conseguiu fornecer a memória. Observe que em uma compilação de 32 bits, pode haver bastante memória livre disponível, mas não um bloco contíguo de espaço de endereço grande o suficiente para mapear.
Como posso resolver isso? Minha principal dificuldade é que chego a um determinado ponto do meu script e R não pode alocar 200-300 Mb para um objeto ... Na verdade, não posso pré-alocar o bloco porque preciso da memória para outro processamento. Isso acontece mesmo quando eu removo objetos desnecessariamente desnecessariamente.
EDIT: Sim, desculpe: Windows XP SP3, 4Gb RAM, R 2.12.0:
> sessionInfo()
R version 2.12.0 (2010-10-15)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_Caribbean.1252 LC_CTYPE=English_Caribbean.1252
[3] LC_MONETARY=English_Caribbean.1252 LC_NUMERIC=C
[5] LC_TIME=English_Caribbean.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
Calloc
e com Free
memória, mas suspeito que não é isso que Benjamin está fazendo.