从R中的url读取csv文件时超时

ANi*_*der 5 csv timeout r

我目前在 R 中有一个脚本,它循环了大约 2000 次(for循环),并且在每个循环中,它使用 url 链接和read.csv将数据放入变量的函数从数据库中查询数据。

我的问题是:当我查询少量数据(大约 10000 行)时,每个循环大约需要 12 秒,这很好。但是现在我每个循环需要查询大约 50000 行数据,并且查询时间增加了很多,每个循环需要 50 秒左右。这对我来说很好,但有时我注意到服务器发送数据需要更长的时间(?75-90 秒)并且显然连接超时并且我收到这些错误:

文件错误(文件,“rt”):无法打开连接

另外: 警告信息:

在文件(文件,“rt”)中:无法打开:HTTP 状态为“0(无)”

或者这个:

文件错误(文件,“rt”):无法打开连接

另外: 警告信息:

在文件(文件,“rt”)中:InternetOpenUrl 失败:“操作超时”

我不会每次都收到相同的警告,它在这两者之间发生变化。

现在,我想要的是避免我的程序在发生这种情况时停止,或者只是防止此超时错误并告诉 R 等待更多时间来获取数据。我在脚本开始时尝试过这些设置作为可能的解决方案,但它一直在发生。

options(timeout=190)
setInternet2(use=NA)
setInternet2(use=FALSE)
setInternet2(use=NA)
Run Code Online (Sandbox Code Playgroud)

任何其他建议或解决方法?也许在发生这种情况时跳到下一个循环并将此错误发生的循环次数存储在一个变量中,以便最后可以再次查询,但仅限i于循环中由于连接错误而被跳过的那些? 当然,理想的解决方案是避免出现此错误。

Ric*_*ton 4

使用该包的解决方案RCurl

您可以timeout使用更改选项

curlSetOpt(timeout = 200)
Run Code Online (Sandbox Code Playgroud)

或者将其传递到调用中getURL

getURL(url_vect[i], timeout = 200)
Run Code Online (Sandbox Code Playgroud)

使用基 R 的解决方案:

只需使用 下载每个文件download.file,然后再担心稍后操作这些文件。

  • 作为一个好的做法,最好将下载文件与使用它们分开。(这样,如果您的处理导致错误,您不必重新下载文件并耗尽带宽。)让一个循环调用(仅)“download.file”,另一个循环调用“read.csv”。 (2认同)