In RCurl ist eine Funktion und eine Klasse CFILE
definiert, um mit C-Level-Dateihandles zu arbeiten. Aus dem Handbuch:Erstellen einer Dateihandle auf C-Ebene in RCurl zum Schreiben von heruntergeladenen Dateien
Die Absicht besteht darin, diese an libcurl als Optionen übergeben zu können, damit sie von oder in die Datei lesen oder schreiben können. Wir können dies auch mit R-Verbindungen tun und Callback-Funktionen spezifizieren, die diese Verbindungen manipulieren. Die Verwendung des FILE-Handle auf C-Ebene ist jedoch bei großen Dateien wahrscheinlich wesentlich schneller.
Es gibt keine Beispiele zu Downloads im Zusammenhang also habe ich versucht:
library(RCurl)
u = "http://cran.r-project.org/web/packages/RCurl/RCurl.pdf"
f = CFILE("RCurl.pdf", mode="wb")
ret= getURL(u, write = getNativeSymbolInfo("R_curl_write_binary_data")$address,
file = [email protected])
Ich habe auch versucht, indem die file
Option mit writedata = [email protected]
ersetzen. Die Datei wird heruntergeladen, ist jedoch beschädigt. Das Schreiben von benutzerdefiniertem Callback für das Argument write
funktioniert nur für nicht binäre Daten.
Gibt es eine Idee, eine Binärdatei in RCurl direkt auf die Festplatte zu laden (ohne sie in den Speicher zu laden)?
Danke. Wie ich geschrieben habe, habe ich 'getURL (url = url, writedata = f @ ref)' versucht, was nicht funktioniert. Es scheint also, dass nur eine Teilmenge der Parameter in 'listCurlOptions()' an 'getURL' übergeben werden kann. Einige werden nur von 'curlPerform' akzeptiert. Ich denke nicht, dass dies im Handbuch erwähnt wird. – antonio
@antonio von 'getURL' und dem RCurl-Quellcode, ist das Standardargument' write' für eine benutzerdefinierte Datei nicht geeignet, und R_curl_write_binary_data arbeitet an einer internen Datenstruktur, nicht an einem Datei-Handle; Es reicht, wenn ich sowohl 'write'- als auch' writedata'-Argumente bereitstelle, um getURL zu verwenden. –
Wie Sie gesagt haben, muss man sich den Quellcode anschauen. Einige weitere Hinweise im Handbuch könnten hilfreich sein. – antonio