2016-09-26 104 views
0

我是一个新的R.用户。 我试图从ftp服务器(我从用户和密码获得)下载7.000个文件(.nc格式)。在网站上,每个文件都是一个可下载的链接。我想下载所有文件(.nc)。R使用Rcurl从FTP下载多个文件

我感谢任何能够帮助我如何在R中运行这些作业的人。只是一个例子,我尝试使用Rcurl和一个循环并告知我:无法下载所有文件。

library(RCurl) 

url<- "ftp://ftp.my.link.fr/1234/" 
userpwd <- userpwd="user:password" 
destination <- "/Users/ME/Documents" 
filenames <- getURL(url, userpwd="user:password", 
ftp.use.epsv = FALSE, dirlistonly = TRUE) 

for(i in seq_along(url)){ 
    download.file(url[i], destination[i], mode="wb") 
} 

我该怎么做?

回答

0

您会看到的第一件事是您的目录中的文件,即对象文件名将被列为一个长字符串。要获得所有文件名作为特征向量的对象,您可以尝试:

files <- unlist(strsplit(filenames, '\n')) 

从这里开始,它只是通过目录中的所有文件循环的问题。我建议你使用curl包而不是Rcurl来下载文件,因为它更容易为每个下载请求提供auth信息。

library(curl) 
    h <- new_handle() 
    handle_setopt(h, userpwd = "user:pwd") 

然后

lapply(files, function(filename){ 
    curl_download(paste(url, filename, sep = ""), destfile = filename, handle = h) 
    }) 
+0

莫希特你好,谢谢你的帮助。我做了你告诉我的。但是,还有另一种类型的错误。 ... curl_download错误(paste(url,files [i],sep =“”),destfile = files [i],:: FTP:无法检索(RETR失败)指定文件 – Gustavo

+0

hey @Gustavo,I我不太清楚为什么会出现这样的错误,for循环为我工作,但是现在我得到了和你提到的一样的错误。你可以使用lapply函数,看看它是否适用于你? – rangeelo