循环下载数据,多久保存一次该信息

Posted

技术标签:

【中文标题】循环下载数据,多久保存一次该信息【英文标题】:downloading data in a loop, how often to save that information 【发布时间】:2012-06-21 04:04:36 【问题描述】:

我正在使用 R,但这个问题并不特定于它。假设您编写了一些循环,在每次迭代时下载一个 url。您想要保存此数据,因此您可以在每次迭代时保存该信息并在每第 n 次迭代时保存它。这样做有什么一般的经验法则吗?一直打开和关闭要写入的文件有多慢?我想到的是

for (i in 1:1000) 
   data <- url("http://...i")
   write.table(data, file="file")

相对于这样的

data <- list()
length(data) <- 20
j <- 1
for (i in 1:1000) 
   data[j] <-url("http://...i")
   j <- j+1
   if (j = 20) j <-1
   if (i %% 20 == 0) 
      write.table(data, file="file")
      
   

【问题讨论】:

第二段代码中的j 是什么? 是否可以保存数据的序列化版本,使用saveRDS 而不是write.table。这会明显更快。您还知道url 地址吗(它们是否以i 结尾?) 每次迭代的数据是否相同类和形状(即所有具有相同字段的数据框)? 可能会在文件大小和保存对象所需的时间之间进行权衡。此外,如果您需要将这些对象重新构建到单个对象中以便以后在 R 中工作,那么您显然不想在每个循环期间保存对象。在不知道这些问题的确切性质的情况下,建议一种特定的方法有点困难. 我认为这取决于您的计算机、您的 URL、您的互联网连接,以及可能与您的具体情况相关的许多其他事情。我会设置一些测试示例并试一试……在我的 Windows 7 64 位操作系统上运行 SSD HD 和 12 gigs RAM 的方法可能不适用于您的机器规格。 【参考方案1】:

如果您下载的所有数据都具有相同的格式,您可能希望append 将它们保存到一个唯一的文件中,在这种情况下,您可以在每次迭代时都这样做。这是一个简短的例子:

sites<-c("714A","715A","716A")
for(i in 1:length(sites))
    data<-read.table(file=paste("http://www.ngdc.noaa.gov/mgg/geology/odp/data/115/",sites[i],"paleomag.txt",sep="/"),sep="\t",header=TRUE)
    #In this example i downloaded paleomagnetic data from deep sea drilling sites.
    ifelse(i==1,h<-TRUE,h<-FALSE)  #Here the idea is that we want to output the column names only the first time.
    write.table(data,file="paleomag_leg115.txt",sep="\t",append=!h,col.names=h,row.names=FALSE)
    

【讨论】:

以上是关于循环下载数据,多久保存一次该信息的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 数据库统计信息应该多久运行一次?

我应该多久保存一次文件?

WaterMark.js给网页加水印

我需要多久更新一次 geoip 查找表?

如何从工作表中获取公式单元格并仅更改一次该公式的变量?

在 iOS 中,后台提取多久执行一次?