7

我已将 .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

这就是我尝试下载 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()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,但我不确定我应该做什么。

任何提示将非常感谢。

ps 我目前的做法是基于这篇文章

4

2 回答 2

9

您可以尝试将其分为两个步骤:首先下载文件,然后加载它。

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

或坚持使用 rCurl 您可以尝试:

bin = getBinaryURL(downloadURL, ...yourOtherParams...) 
writeBin(bin, "temp.rData")  
load("temp.rData")
于 2013-09-16T17:15:13.500 回答
3

我也花了很多时间在这上面——希望在一个闪亮的应用程序中使用它,所以我不想写入磁盘。

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 数据类型并避免了错误。仅供参考-这是我的第一篇文章,希望对您有所帮助

于 2015-09-17T13:20:36.513 回答