【发布时间】:2016-01-15 10:35:00
【问题描述】:
我在将网络数据读入 R 时遇到了一些问题。
我希望下载的数据存储在here,您可以在此页面上插入站号,然后将其定向到数据集。例如,如果我在框中输入站号 615071800000,我将被重定向到另一个页面,然后我可以在其中选择数据并要求在浏览器中查看 txt 文件。
由于我有大量的站点需要从中获取数据,因此我决定在 R 中编写一个脚本来执行此操作。下面是一个例子:
site_id <- c('615071800000','629065900000','617106090000','617107080000',
'615071900000','646066100000','646066420010','646067000000')
for (i in 1:length(site_id)){
web_str <- 'http://data.giss.nasa.gov/tmp/gistemp/STATIONS/tmp_'
str <- paste(web_str,site_id[i],'_14_0/station.txt', sep = '')
# read data from web
dat <- read.table(str, sep = "", header = TRUE,
fill = TRUE, na.string = c(999.9,999.90))
}
这些都是有效的站点 ID,提供并用于生成“str”的链接应该会引导我访问数据。但是,当我在此示例集上运行代码时,它失败了。运行这个例子,我得到:
Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") : cannot open: HTTP status was '404 Not Found'
对我来说发生在循环 i == 7
所以,我将 i = 7 的“str”复制到浏览器中
http://data.giss.nasa.gov/tmp/gistemp/STATIONS/tmp_646066420010_14_0/station.txt
但页面是空的,我在页面顶部收到一条消息“未找到”。
但是,如果我返回主页(即此处提供的第一个链接)并在字段中输入站号,它会将我带到数据,然后我将该页面的链接复制到 R:
http://data.giss.nasa.gov/tmp/gistemp/STATIONS/tmp_646066420010_14_0/station.txt
结果与我之前尝试的字符串完全相同。为什么这不起作用?更奇怪的是,如果我现在再次尝试运行代码,R 现在在 i == 8 处返回相同的错误,即它找到了上一个文件但没有找到下一个文件。这里发生了什么?这是网站的问题吗,例如仅当您在第一页上手动搜索电台时才会生成 txt 文件?是否有解决方法,或者是否有人对我如何使这项工作提出建议?或者有人可以验证这也是另一台机器上的问题。
【问题讨论】:
-
您必须首先在第一个链接提供的字段中输入所有
site_id。然后该站点将为所有 site_id 创建临时文件。在这里从 URL 读取不是一个好主意。 -
那么,如果我有 1000 个站点数据要获取,我将不得不在第一个链接中手动输入 1000 个单独的站点 ID?如果是这样,那效率不是很高。
标签: r url error-handling file-handling