R 打开时出错。已达到连接超时

R 打开时出错。已达到连接超时,r,R,我现在有这个工作。我是新来的,所以我知道连接是如何工作的,这是谷歌没有帮助的一件事 我的代码从crest api获取数字 df <- readWorksheetFromFile("marketTypeIDS.xls", sheet=1, startRow = 1, endCol = 2) typeIDs <- unname(unlist(df[,1])) calcday<-as.numeric(Sys.Date())-30 currentdate<-as.numeri

我现在有这个工作。我是新来的,所以我知道连接是如何工作的,这是谷歌没有帮助的一件事

我的代码从crest api获取数字

df <- readWorksheetFromFile("marketTypeIDS.xls", sheet=1, startRow = 1, endCol = 2)

typeIDs <- unname(unlist(df[,1]))

calcday<-as.numeric(Sys.Date())-30
currentdate<-as.numeric(Sys.Date())

itemcount <- 0
monthvolumes <- seq(1:11897)

baseurl <- "https://public-crest.eveonline.com/market/10000048/types/"

monthlyvolume <- (0)

tmpvol <- (0)

for (i in 1:11897) 
    {
    itemcount <- fromJSON(paste0(baseurl, typeIDs[i], "/history/"), flatten = TRUE)$totalCount
    Sys.sleep(0.034)
    if (itemcount ==0)
    {
    monthvolumes[i] <- 0
    }
    else 
        {
        repeat
            {
            currentdate <- as.Date(fromJSON(paste0(baseurl, typeIDs[i], "/history/"), flatten = TRUE)$items[itemcount,8])
            Sys.sleep(0.034)                    
            if (as.numeric(currentdate)<calcday)
                {
                break
                }
            tmpvol <- fromJSON(paste0(baseurl, typeIDs[i], "/history/"), flatten = TRUE)$items[itemcount,6]
            Sys.sleep(0.034)
            monthlyvolume <- monthlyvolume+tmpvol
            itemcount <- itemcount-1
            if (itemcount==0)
                {
                break
                }
            }               
        monthvolumes[i]<-monthlyvolume
        monthlyvolume<-0
        }                                           
    }
此连接是在for循环的第一次运行时创建的(它从链接中的18开始) 如何事先关闭此连接,使其不会中断循环?(这只运行了大约一个小时,因此很难通过“尝试”进行测试)

提前谢谢你的帮助!
如果你有任何其他建议,我的耳朵是敞开的

我解决了这个问题,这样它在什么时候断裂就不重要了。 如果有,它总是从最后一个书面记录开始

因此,我没有循环1中的11897条记录,而是读取了输出文件中最后写入的内容

我像@hrbrmstr建议的那样,将所有这些都包装在一个Try/Catch中,我将所有这些都放在一个无休止的循环中 只有在最后一条记录被写入时才会中断


这不是一个漂亮的解决方案,但它工作完美且易于实现,因为它只重新启动了几次并一直运行到最后,而我只需要它几次。

我解决了这个问题,因此它在什么时候中断都无关紧要。 如果有,它总是从最后一个书面记录开始

因此,我没有循环1中的11897条记录,而是读取了输出文件中最后写入的内容

我像@hrbrmstr建议的那样,将所有这些都包装在一个Try/Catch中,我将所有这些都放在一个无休止的循环中 只有在最后一条记录被写入时才会中断


这不是一个漂亮的解决方案,但它工作完美且易于实现,因为它只重新启动了几次并一直运行到最后,而我只需要它几次。

由于您实际遇到错误,您可以在
fromJSON
调用中使用
try
tryCatch
(我将为
fromJSON
)创建一个包装函数,捕捉错误,巧妙地处理它,然后脚本将运行。或者,您可以使用
httr::GET/POST
,在那里设置超时值(以防万一这是服务器端的合法延迟)然后还可以使用
try/tryCatch
作为包装。我们没有
marketTypeIDS.xls
来帮助测试,所以这可能是您将获得的最好结果。这里是完整的源代码和xls文档。您的asnwer很有意义。尽管我仍然想知道如何关闭此连接我想知道为什么在超时时一切都会中断。因为你实际上遇到了一个错误,你可以在
fromJSON
调用周围使用
try
tryCatch
(我会为
fromJSON
创建一个包装函数),捕捉错误,巧妙地处理它,然后脚本将运行。或者,您可以使用
httr::GET/POST
,在那里设置超时值(以防这是服务器端的合法延迟)然后还可以使用
try/tryCatch
作为包装。我们没有
marketTypeIDS.xls
来帮助测试,所以这可能是您将获得的最好结果。这里是完整的源代码和xls文档。您的asnwer很有意义。尽管我仍然想知道如何关闭此连接我想知道为什么超时时一切都会中断。
 Error in open.connection(con, "rb") : Timeout was reached 
6 open.connection(con, "rb") 
5 open(con, "rb") 
4 parse_con(txt, 1024^2, bigint_as_char) 
3 parseJSON(txt, bigint_as_char) 
2 fromJSON_string(txt = txt, simplifyVector = simplifyVector, simplifyDataFrame = simplifyDataFrame, 
    simplifyMatrix = simplifyMatrix, flatten = flatten, ...) 
1 fromJSON(paste0(baseurl, typeIDs[i], "/history/"), flatten = TRUE) 
In addition: Warning message:
closing unused connection 3 (https://public-crest.eveonline.com/market/10000048/types/18/history/)