2013-09-16 2 views
7

Я загрузил файл .RData (созданный с помощью save()) на ftp-сервер, и я пытаюсь использовать getURL() для загрузки тот же файл. Для всех примеров и сообщений, которые я прочитал, я не могу заставить это работать.Загрузить .RData и .csv файлы с FTP с помощью RCurl (или любого другого метода)

.rdata файл был сохранен с помощью:

save(results, file=RDataFilePath, compress="xz") #save object "results" w/ compression 
#RDataFilePath is the location of the results.RData file on my harddrive 

Эти данные были загружены с помощью:

uploadURL <-"ftp://name:[email protected]/folder/results.RData" #name the url 
ftpUpload(RDataFilePath, to=uploadURL, connecttimeout=120) #upload 

Это, как я пытаюсь скачать results.RData с помощью getURL:

downloadURL <- "host/folder/results.RData" 
load(getURL(downloadURL, userpwd="name:password", connecttimeout=120)) 

который дает следующую информацию:

Error in curlPerform(curl = curl, .opts = opts, .encoding = .encoding) : 
    embedded nul in string: 'ý7zXZ' 

Когда я вставляю строку downloadURL в свой браузер, файл .RData загружается немедленно, поэтому я знаю, что нет опечатки. Сообщение об ошибке предполагает, что URL-адрес не может получить чтение b/c форматирования сжатия; однако я получаю подобное сообщение об ошибке, когда использую save() без сжатия.

Я также получаю сообщение об ошибке при попытке загрузить файл CSV с FTP:

read.csv(getURL(downloadURL1)) #downloadURL1 is similar to downloadURL, but points to the .csv file 
Error in file(file, "rt") : cannot open the connection 

, а затем предупреждение, которое гласит In addition: Warning message: In file(file, "rt") : cannot open file, а затем начинает перечислять содержимое .csv.

Я пытался понять это в течение большей части утра, и я чувствую, что мне не хватает чего-то действительно элементарного. Я предполагаю, что мне нужно изменить параметр curl, чтобы он знал, какой тип файла он будет читать. Мой синтаксис, вероятно, немного выключен, и я не правильно использую getURL, но я не уверен, что делать.

Любые советы были бы весьма признательны.

p.s. Мой текущий подход основан на этом Post

ответ

9

Вы можете попробовать разбить его на два этапа: сначала загрузите файл, а затем загрузите его.

download.file(downloadURL, "temp.rData") 
load("temp.rData") 

или наклеивание с RCurl вы можете попробовать:

bin = getBinaryURL(downloadURL, ...yourOtherParams...) 
writeBin(bin, "temp.rData") 
load("temp.rData") 
+1

Этот метод работает для CSV-файла (я использовал 'test = getURL()' и 'read.csv (text = test)' Спасибо! все еще получают ошибку при попытке прочитать файл .RData «Ошибка в curlPerform (curl = curl, .opts = opts, .encoding = .encoding): embedded nul in string: 'ý7zXZ'. Когда я пытаюсь загрузить файл, он говорит, что он не может открыть URL-адрес. – rbatt

+0

Вы используете систему unix? Если у вас есть функция завивки для использования в командной строке, вы можете попробовать что-то вроде системы («curl ftp: // xxxx temp.rData ") изнутри R. Если завиток не работает, может быть,« wget »будет работать? – kith

+0

Я на OSX, мои коллеги будут в Windows. Я не очень далек от download.file, t подключиться к серверу Я использовал RCURL-пакет. Используя 'getBinaryURL()' я могу получить файл в двоичной форме, но это все тарабарщина, и я не могу понять, как его преобразовать. «raw» и save(), затем load() снова не преобразует его обратно в исходный объект R (или что-либо значимое). – rbatt

3

Я потратил довольно много времени на это, а также - в надежде использовать это в блестящем приложении, так что я не хочу писать на диск.

library(RCurl) 
url <- "ftp://[email protected]/ALLF1Data.Rda" 
userpwd <- "name:password" 
bin = getBinaryURL(url, userpwd = userpwd, verbose = TRUE, 
        ftp.use.epsv = TRUE) 

load(rawConnection(bin)) 

По Использованию rawConnection() я был в состоянии избежать записей на диск шаг, как это обрабатывается необработанные данные типа отлично и избежать ошибок. FYI - Это мой первый пост, поэтому я надеюсь, что это полезно