我有一个名为URLlist的URL列表,并在其上循环以获取每个URL的源代码:
for (k in 1:length(URLlist)){
temp = getURL(URLlist[k])
}
Run Code Online (Sandbox Code Playgroud)
问题是一些随机URL,代码卡住了,我得到了错误消息:
Error in function (type, msg, asError = TRUE) :
transfer closed with outstanding read data remaining
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用出现问题的URL的getURL函数而不是在循环中时,它可以正常工作。
有什么帮助吗?非常感谢你
如果没有更多信息,很难确定,但这可能只是请求发送得太快,在这种情况下,只需在请求之间暂停可能会有所帮助:
for (k in 1:length (URLlist)) {
temp = getURL (URLlist[k])
Sys.sleep (0.2)
}
Run Code Online (Sandbox Code Playgroud)
我假设您的实际代码在循环的每次迭代中写入“temp”之前都会对“temp”执行某些操作,并且无论它执行什么操作都非常快。
您还可以尝试构建一些错误处理功能,这样一个问题就不会毁掉整个事情。下面是一个粗略的示例,在放弃之前对每个 URL 尝试两次:
for (url in URLlist) {
temp = try (getURL (url))
if (class (temp) == "try-error") {
temp = try (getURL (url))
if (class (temp) == "try-error")
temp = paste ("error accessing", url)
}
Sys.sleep(0.2)
}
Run Code Online (Sandbox Code Playgroud)