首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R下载,文件冻结

R下载,文件冻结
EN

Stack Overflow用户
提问于 2018-01-27 10:28:28
回答 1查看 239关注 0票数 1

我正试着从一个网站下载一些图片。我有一系列的urls图片,我必须下载。所以我用下面的代码运行它:

代码语言:javascript
复制
 dlphoto <- function(x){
   print(x)
   setTimeLimit(5)
   Sys.sleep(0.3)
   download.file(x , destfile = basename(x))
   }

然而,这个函数有一个主要问题:当我用它运行我的向量15000 urls时,它会冻结整个R会话,并停止对任何事情的反应。但是,如果我单独运行urls,它可以正常工作。或者当我运行1:50 urls时,它也能工作。但是,当我投入1:100,例如,它也冻结了.你能帮我弄清楚吗?

一开始,我使用这一行来调用:

代码语言:javascript
复制
 dlphoto(allimage[,2])

然后我换了这个:

代码语言:javascript
复制
 dlphoto(allimage[c(1:50),2])
 dlphoto(allimage[c(51:100),2])
 dlphoto(allimage[c(101:150),2])
 dlphoto(allimage[c(151:200),2])
 and so on untill 15000

诸若此类。但它仍然冻得很厉害。每次它死的时候,我都要关闭R,搜索这个过程到达的地方,然后从那里开始。我经常收到这样的警告信息:

代码语言:javascript
复制
   Error in download.file(x, destfile = basename(x)) : 
   reached CPU time limit

另外,你能帮我把下载的照片保存在

代码语言:javascript
复制
    /Users/name/Desktop/M2/Mémoire M2/Scrapingtest/photos

非常感谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-27 23:14:26

有几个改进的可能。我假设OP使用的是来自basedownload.file包,如果method没有设置libcurlquiet = T,那么在一次尝试中只支持单个文件。

因此,修复方法应该是在method = "libcurl"函数中使用quiet = TRUEquiet = TRUE。职能的改变:

代码语言:javascript
复制
dlphoto <- function(x){
    print(x)
    download.file(x , destfile = basename(x), method="libcurl", quiet = TRUE)
}

代码语言:javascript
复制
download.file(x , destfile = basename(x), method="libcurl", quiet = TRUE)

注意:在上述两种情况下,都不会显示进度条.

我认为来自optionsoptions的价值足以确保在出现延迟的情况下从download.file返回。

应该检查download.file返回值的错误。任何non-zero返回值都表示失败。

如果您希望看到进度条(一次可能不需要1500个文件),那么函数应该修改为一次处理一个文件。修改后的职能如下:

代码语言:javascript
复制
# This function will display progressbar for each file
dlphoto <- function(x){
  for(file in x){
    print(fine)
    download.file(file , destfile = basename(file))
  }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48474836

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档