2013-06-25 5 views
6

Ich versuche, eine Datei herunterzuladen, die 1,1 Gigabyte mit httr ist, aber ich bin schlagen folgende Fehlermeldung:HTTR GET-Funktion nicht mehr genügend Speicherplatz, wenn eine große Datei herunterzuladen

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

mein C-Laufwerk verfügt über 400 GB gratis ..

im RCurl Paket sehe ich die maxfilesize und maxfilesize.large Optionen, wenn getCurlOptionsConstants() verwenden, aber ich verstehe nicht, ob/wie diese könnten zu httr durch config oder set_config weitergegeben werden .. oder wenn ich brauche, um zu wechseln RCurl für diese .. und selbst wenn ich wechseln muss, erhöht sich die maximale Dateigröße Arbeit?

hier ist mein Session ..

> 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 

..und (dies nicht empfohlen wird, nur weil es Ihnen eine Weile dauern wird), wenn Sie meine Fehler reproduzieren möchten, können Sie zu https://usa.ipums.org/usa-action/samples gehen können, Registrieren Sie sich für ein neues Konto, wählen Sie den 2011 5-Jahres-ACS-Extrakt, fügen Sie etwa hundert Variablen hinzu und warten Sie, bis der Auszug fertig ist. Bearbeiten Sie dann die ersten drei Zeilen und führen Sie den folgenden Code aus. (wieder, nicht empfohlen)

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) 

Antwort

1

GET Anrufe httr:::make_request dies setzt die curl Optionen definiert in config = list(). Allerdings scheint es, die writefunction otpion hart codiert in ‚HTTR‘

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

Sie wahrscheinlich eine geeignete `writefunction‘ verwenden RCurl und definieren müssen. Die folgende Lösung Create a C-level file handle in RCurl for writing downloaded files von @Martin Morgan scheint der richtige Weg zu sein.

+0

es Ihnen danken! Ich denke, ich bin näher an der Antwort, aber es funktioniert immer noch nicht. Ich habe meinen ganzen Code von 'httr' nach' RCurl' verschoben und einige der Antworten von @Martin Morgan aufgenommen, und da es jetzt ganz anders ist, habe ich [diese neue Frage] geschrieben (http://stackoverflow.com/ Fragen/17329288/How-to-Download-a-Large-Binär-Datei-mit-rcurl-nach-Server-Authentifizierung) .. Ich glaube nicht, dass es eine Lösung mit 'HTR'? –

+0

Bitte einen Fehler - httr sollte in der Lage sein, dies zu tun (obwohl es nicht der Standard sein wird) – hadley

+0

getan. Danke @Hadley –

Verwandte Themen