2013-06-25 6 views
6

sto cercando di scaricare un file che è 1,1 gigabyte con httr ma sto colpendo il seguente errore:HTTR GET funzione di esaurire lo spazio quando si scarica un file di grandi dimensioni

x <- GET(extract.path) 
Error in curlPerform(curl = handle$handle, .opts = curl_opts$values) : 
    cannot allocate more space: 1728053248 bytes 

mio disco C ha 400GB gratuito ..

nel pacchetto RCurl, vedo le opzioni maxfilesize e maxfilesize.large quando si utilizza getCurlOptionsConstants() ma io non capisco se/come questi potrebbero essere passati a httr attraverso config o set_config .. o se ho bisogno di passare a RCurl per questo .. e anche se ho bisogno di passare, aumenterà il lavoro di archiviazione massima?

Ecco il mio sessionInfo ..

> sessionInfo() 
R version 3.0.0 (2013-04-03) 
Platform: i386-w64-mingw32/i386 (32-bit) 

locale: 
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 LC_MONETARY=English_United States.1252 LC_NUMERIC=C       LC_TIME=English_United States.1252  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] XML_3.96-1.1 httr_0.2  

loaded via a namespace (and not attached): 
[1] digest_0.6.0 RCurl_1.95-4.1 stringr_0.6.2 tools_3.0.0 

..e (questo non è raccomandato, solo perché vi porterà un po 'di) se si desidera riprodurre il mio errore, si può andare a https://usa.ipums.org/usa-action/samples, registrati per un nuovo account, scegli l'estratto di ACs a 5 anni 2011, aggiungi circa un centinaio di variabili e attendi che l'estratto sia pronto. quindi modifica le prime tre righe ed esegui il codice seguente. (ancora una volta, non è raccomandato)

your.email <- "[email protected]" 
your.password <- "password" 
extract.path <- "https://usa.ipums.org/usa-action/downloads/extract_files/some_file.csv.gz" 

require(httr) 

values <- 
    list(
     "login[email]" = your.email , 
     "login[password]" = your.password , 
     "login[is_for_login]" = 1 
    ) 

POST("https://usa.ipums.org/usa-action/users/validate_login" , body = values) 
GET("https://usa.ipums.org/usa-action/extract_requests/download" , query = values) 

# this line breaks 
x <- GET(extract.path) 

risposta

1

GET chiamate httr:::make_request questa imposta le opzioni definite nel ricciolo config = list(). Tuttavia sembra che l'otpion writefunction è difficile codificato nel 'HTTR'

opts$writefunction <- getNativeSymbolInfo("R_curl_write_binary_data")$address 

Si avrà probabilmente bisogno di usare RCurl e definire un adeguato `writefunction'. La seguente soluzione Create a C-level file handle in RCurl for writing downloaded files da @ Martin Morgan sembra essere la strada da percorrere.

+0

grazie! penso di essere più vicino alla risposta, ma non funziona ancora. ho spostato tutto il mio codice da 'httr' a' RCurl' e ho incorporato parte della risposta di @Martin Morgan, e dato che ora è molto diverso, ho scritto [questa nuova domanda] (http://stackoverflow.com/ domande/17329288/how-to-download-a-large-binary-file-with-rcurl-after-server-authentication) .. non penso che ci sia una soluzione con 'httr'? –

+0

Si prega di file un bug - httr dovrebbe essere in grado di fare questo (anche se non sarà il default) – hadley

+0

fatto. grazie @hadley –

Problemi correlati