Con solo 4 GB di RAM (con Windows 10, quindi realizzane circa 2 o più realisticamente 1 GB) ho dovuto fare molta attenzione con l'allocazione.
Uso data.table quasi esclusivamente.
La funzione 'fread' ti consente di sottoinsieme le informazioni in base ai nomi dei campi durante l'importazione; importa solo i campi effettivamente necessari per cominciare. Se stai usando la lettura R di base, annulla le colonne spurie subito dopo l'importazione.
Come 42- suggerisce , sia possibile, eseguirò un sottoinsieme all'interno delle colonne immediatamente dopo aver importato le informazioni.
Spesso rm () oggetti dall'ambiente non appena non sono più necessari, ad es. Nella riga successiva dopo averli usati per sottoinsieme qualcos'altro, e chiamo gc ().
'fread' e 'fwrite' da data.table possono essere molto veloci rispetto alle letture e scritture di base R.
Come suggerisce kpierce8 , scrivo quasi sempre tutto fuori dall'ambiente e lo riporto, anche con migliaia / centinaia di migliaia di piccoli file da superare. Ciò non solo mantiene "pulito" l'ambiente e mantiene bassa l'allocazione di memoria ma, probabilmente a causa della grave mancanza di RAM disponibile, R ha una propensione a crash frequenti sul mio computer; molto frequentemente. Avere il backup delle informazioni sull'unità stessa mentre il codice avanza attraverso varie fasi significa che non devo ricominciare dall'inizio se si blocca.
A partire dal 2017, penso che gli SSD più veloci siano in esecuzione di alcuni GB al secondo attraverso la porta M2. Ho un SSD Kingston V300 (550MB / s) da 50 GB davvero di base che utilizzo come disco principale (con Windows e R). Conservo tutte le informazioni di massa su un piatto WD da 500 GB economico. Spingo i set di dati sull'SSD quando inizio a lavorarci. Questo, combinato con "impaurire" e "scrivere" tutto ha funzionato alla grande. Ho provato a usare 'ff' ma preferisco il primo. La velocità di lettura / scrittura 4K può creare problemi con questo; il backup di un quarto di milione di file 1k (per un valore di 250 MB) dall'unità SSD al piatto può richiedere ore. Per quanto ne so, non esiste ancora alcun pacchetto R in grado di ottimizzare automaticamente il processo di "chunkification"; ad esempio guarda quanta RAM ha un utente, testare le velocità di lettura / scrittura della RAM / di tutte le unità collegate e quindi suggerire un protocollo di "chunkification" ottimale. Ciò potrebbe produrre significativi miglioramenti del flusso di lavoro / ottimizzazioni delle risorse; ad es. dividerlo in ... MB per il ram -> dividerlo in ... MB per l'SSD -> dividerlo in ... MB sul piatto -> dividerlo in ... MB sul nastro. Potrebbe campionare in anticipo insiemi di dati per dargli uno stick di misurazione più realistico su cui lavorare.
Molti dei problemi a cui ho lavorato in R riguardano la formazione di coppie di combinazioni e di permutazione, triple ecc., Il che rende la RAM limitata più una limitazione poiché spesso si espandono almeno esponenzialmente ad un certo punto. Questo mi ha fatto concentrare molta attenzione sulla qualità piuttosto che sulla quantità di informazioni che entrano in esse per iniziare, piuttosto che cercare di ripulirla in seguito, e sulla sequenza di operazioni nella preparazione delle informazioni per iniziare (a partire da l'operazione più semplice e aumentando la complessità); ad es. sottoinsieme, quindi unisci / unisci, quindi forma combinazioni / permutazioni ecc.
Sembrano esserci dei vantaggi nell'utilizzare la lettura e la scrittura di base R in alcuni casi. Ad esempio, il rilevamento degli errori all'interno di 'fread' è così buono che può essere difficile provare a ottenere informazioni davvero disordinate in R per cominciare per ripulirle. Base R sembra anche molto più semplice se usi Linux. Base R sembra funzionare bene in Linux, Windows 10 utilizza ~ 20 GB di spazio su disco mentre Ubuntu ha bisogno solo di pochi GB, la RAM necessaria con Ubuntu è leggermente inferiore. Ma ho notato grandi quantità di avvisi ed errori durante l'installazione di pacchetti di terze parti in (L) Ubuntu. Non consiglierei di allontanarmi troppo da (L) Ubuntu o altre distribuzioni di titoli con Linux poiché puoi perdere così tanta compatibilità complessiva da rendere il processo quasi inutile (penso che 'unità' dovrebbe essere cancellata in Ubuntu dal 2017 ).
Spero che alcuni di questi possano aiutare gli altri.