2015-05-30 18 views
9

Ho una variabile che cresce in dimensioni da pochi MB a 3 GB in un ciclo. e ho esaurito l'errore di memoria. Ho provato alcune soluzioni come aumentare la quantità di memoria che può essere utilizzata da R, usando anche rm() e gc(). Ho pensato che potrebbe essere risolto se prima assegno 3 GB a questa variabile. Ora:Come assegnare una dimensione di memoria fissa a una variabile in R

  1. E 'possibile in R?

  2. In tal caso, migliorerà la velocità?

  3. E 'probabile che risolvere errore di memoria

Ho un sistema operativo Windows 7 a 64 bit. il mio codice è più di mille righe. ma le linee principali sono

dati 1.getting da un file di accesso da funzioni odbcConnectAccess2007 e SQLFetch e mettendo il tavolo in una variabile temp

2.merging la variabile master con variabile TEMP

+5

Potrebbe fornire un esempio (di codice) del problema. Il * "cresce di dimensioni" * è spesso il problema. Vedi anche la seconda cerchia di [The R-Inferno] (http://www.burns-stat.com/pages/Tutor/R_inferno.pdf). – sgibb

+3

dai un'occhiata ai pacchetti 'ETLUtils' e' ff'/'ffbase' /' ffbase2', che ti permetteranno di ottenere dati dalla connessione odbc e di archiviare 'data.frame' non nella RAM ma sull'HDD. – inscaven

risposta

1

Senza vedere il codice specifico , è difficile sapere cosa potrebbe aiutare. Ma se stai chiamando rbind/cbind/merge all'interno di un ciclo for, questo è estremamente inefficiente. Quello che puoi fare è buttare tutto in una lista e poi usare do.call alla fine. Confronta:

data_list <- list(); 
length(data_list) <- 2000 

for(i in 1:2000) { 
    data_list[[i]] <- data.frame(matrix(runif(11*10), ncol=11, nrow=10)) 
} 


sequentialRbind<-function() { 
    res <- data_list[[1]] 
    for(i in 2:length(data_list)) { 
     res <- rbind(res, data_list[[i]]) 
    } 
    return(res) 
} 

> system.time(res1 <- do.call(rbind,data_list)) 
    user system elapsed 
    0.78 0.00 0.78 
> 
> system.time(res2 <- Reduce(rbind,data_list)) 
    user system elapsed 
    8.24 0.00 8.27 
> 
> system.time(res3 <- sequentialRbind()) 
    user system elapsed 
    8.25 0.00 8.27 
Problemi correlati