循环下载数据,多久保存一次该信息
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)
【讨论】:
以上是关于循环下载数据,多久保存一次该信息的主要内容,如果未能解决你的问题,请参考以下文章