我已将.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()
w / o压缩时,我收到类似的错误消息。
尝试从FTP下载.csv时,我也收到错误消息:
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
答案 0 :(得分:9)
您可以尝试将其分为两个步骤:首先下载文件,然后加载它。
download.file(downloadURL, "temp.rData")
load("temp.rData")
或坚持使用rCurl,您可以尝试:
bin = getBinaryURL(downloadURL, ...yourOtherParams...)
writeBin(bin, "temp.rData")
load("temp.rData")
答案 1 :(得分:4)
我花了相当多的时间在这上面 - 希望在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数据类型并避免了错误。 仅供参考 - 这是我的第一篇文章,所以我希望它有用