2013-02-26 24 views
10

Un avviso di memoria influisce sulla mia analisi R?Avviso limite memoria R contro "impossibile allocare ..."

Quando si esegue un grande script di analisi dei dati in R ottengo un qualcosa di simile avvertimento:

In '... ' reached total allocation of ___Mb: see help...

Ma il mio script continua senza errori, solo l'avviso. Con altri insiemi di dati ottengo un qualcosa di errore del tipo:

Error: cannot allocate vector of size ___Mb:

So che l'errore si rompe la mia analisi dei dati, ma è qualcosa che non va solo ottenere l'avvertimento? Non ho notato nulla di mancante nel mio set di dati, ma è molto grande e non ho alcun buon mezzo per controllare tutto. Sono a 18000 Mb allocati alla memoria e non posso allocare ragionevolmente di più.

+0

Quale piattaforma/sistema operativo stai utilizzando? Esegui 'Sys.info() [" machine "]' e '.Platform $ OS.type'. È 32 bit R sotto Windows? –

+0

È l'edizione aziendale di Windows 7 a 64 bit (x86-64, Windows). La macchina ha 20 GB di memoria ma ricevo gli stessi avvisi quando alloco 19000 Mb. C'è una sezione nel mio script in cui la memoria è un problema e io uso l'intero 18000Mb (compare anche nel task manager di Windows). Ho bisogno di importare e combinare molti file di testo, eseguire alcuni calcoli e quindi riorganizzare i dati prima di rompere in pezzi più piccoli. – GregS

+2

Si potrebbe provare ad allocare tutta la memoria nel proprio sistema. R non può rubare la memoria che è già in uso dal sistema operativo. Non sono sicuro che l'uso liberale di 'gc()' durante le parti di memoria intensive del tuo codice potrebbe essere d'aiuto? –

risposta

8

Nel lontano il R 2.5.1 news ho trovato questo riferimento agli avvisi di allocazione della memoria:

malloc.c has been updated to version 2.8.3. This version has a slightly different allocation strategy, and is likely to work a little better close to address space limits but may give more warnings about reaching the total allocation before successfully allocating.

Sulla base di questa nota, ipotizzo (senza alcuna conoscenza avanzata di attuazione interno) che l'avvertimento viene dato quando la memoria chiamata di allocazione in R (malloc.c) non è riuscito un tentativo di allocare memoria. Vengono fatti diversi tentativi di allocare memoria, possibilmente utilizzando metodi diversi e possibilmente con chiamate al garbage collector. Solo quando malloc è abbastanza sicuro che l'allocazione non può essere eseguita restituirà un errore.

Gli avvisi non compromettono gli oggetti R esistenti. Semplicemente informano l'utente che R si sta avvicinando ai limiti della memoria del computer.

(Spero che un utente più esperto possa confermare questo ...)

+1

Sembra proprio che R abbia chiamato il garbage collector quando emette l'avviso. Puoi usare 'gcinfo (TRUE)' per abilitare la registrazione e allocare attentamente la memoria attorno al limite, per osservare alcuni avvisi e messaggi GC per allocazioni riuscite. – Jerzy

Problemi correlati