Загрузите файлы.RData и.csv с FTP, используя RCurl (или любой другой метод)

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

Файл.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:password@host/folder/results.RData" #name the url
ftpUpload(RDataFilePath, to=uploadURL, connecttimeout=120) #upload

Вот как я пытаюсь загрузить результаты. 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, но я не уверен, что мне следует делать.

Любые советы будут с благодарностью.

PS Мой нынешний подход основан на этом посте

2 ответа

Решение

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

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

или придерживаясь rCurl, вы можете попробовать:

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

Я потратил немало времени и на это - в надежде использовать это в приложении Shiny, чтобы не записывать на диск.

library(RCurl)
url <- "ftp://F1World@aesius.ca/ALLF1Data.Rda"
userpwd <- "name:password"
bin = getBinaryURL(url, userpwd = userpwd, verbose = TRUE,
                   ftp.use.epsv = TRUE)

load(rawConnection(bin))

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

Другие вопросы по тегам