2013-06-25 11 views
6

Próbuję pobrać plik, który znajduje się 1,1 gigabajtów z httr ale jestem uderzenie następujący błąd:httr GET funkcja wyczerpaniu przestrzeni podczas pobierania dużego pliku

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

mój dysk C ma 400GB wolnego ..

w pakiecie RCurl, widzę opcji maxfilesize i maxfilesize.large podczas korzystania getCurlOptionsConstants() ale nie rozumiem, czy/jak mogą one być przekazywane do httr przez config lub set_config .. czy muszę przełączyć się na RCurl dla tego .. i nawet jeśli będę musiał się przełączyć, zwiększy maksymalny rozmiar pliku?

oto moja 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 

..i (nie jest to zalecane, tylko dlatego, że będzie to trochę potrwać) Jeśli chcesz odtworzyć mój błąd, można przejść do https://usa.ipums.org/usa-action/samples, Zarejestruj się na nowe konto, wybierz 5-letni ekstrakt z 2011 roku, dodaj około 100 zmiennych, a następnie poczekaj, aż wyciąg będzie gotowy. następnie edytuj pierwsze trzy linie i uruchom poniższy kod. (ponownie, nie zaleca)

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) 

Odpowiedz

1

GET połączeń httr:::make_request Ustawia opcje curl zdefiniowane w config = list(). wydaje się jednak writefunction otpion jest zakodowana w „httr”

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

Prawdopodobnie będzie trzeba użyć RCurl zdefiniować odpowiedni `writefunction”. Następujące rozwiązanie Create a C-level file handle in RCurl for writing downloaded files z @Martin Morgan wydaje się być drogą do zrobienia.

+0

dziękuję! Myślę, że jestem bliżej odpowiedzi, ale wciąż nie działa. Przeniosłem cały mój kod z 'httr' na' RCurl' i włączyłem część odpowiedzi @Martin Morgan, a ponieważ jest teraz zupełnie inaczej, napisałem [to nowe pytanie] (http://stackoverflow.com/ pytania/17329288/how-to-download-a-large-binary-file-with-rcurl-after-server-authentication) .. nie sądzę, że istnieje rozwiązanie z 'httr'? –

+0

Proszę zgłosić błąd - httr powinien być w stanie to zrobić (choć nie będzie to domyślne). – hadley

+0

zrobione. dzięki @hadley –

Powiązane problemy