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