r与jsonlite编织 - 在r降压中工作,但在编织过程中不工作



我从我的r标记下得到了一个成功的针织文档。然后,我修改了两个与误差无关的单元格。突然,我第二次打电话给jsonlite的问题,如此错误所示:

line 165:  Error in open.connection(con, "rb"): Couldn't connect to server 
Calls: <anonymous ... fromJSON_String -> parseJSON -> parse_con -> open -> 
open.connection

检查源代码,一个较早的单元格具有使JSON调用的函数。测试功能编织良好的单元格一个。将循环中的功能重新使用以进行一堆JSON调用(它们之间的3.7秒延迟)的单元两个不是编织的。代码有效。甚至以前编织。现在它引发了一个错误。

我的直觉是这是一个随机的性能问题,但是现在它反复失败,行为对我来说是逻辑的。我可以运行代码,并且在每个单元格中都可以正常工作。我已经检查了我的单元声明语法,寻找可以绊倒编织的故障,但找不到任何错误。该代码太大而无法完整地显示在此处,因此下面只是Markdown Doc的相关单元格,该单元在编织时起作用(其中包含jsonlite)及其在其后立即触发编织错误的单元格该代码正常。

文档现在无法编织我的最新更改。关于如何摆脱纠结以重新连接本文档的任何想法或有用的建议将不胜感激:

此细胞运行并编织良好:

```{r p5jLiteAns, message=FALSE, warning=FALSE}
# sample ids: tt0120737, tt0468569
library(curl)
library(jsonlite)
get_json_movieRecord <- function(movieID, showRequest=FALSE) {
  movieURL_start <- "http://www.omdbapi.com/?i="
  movieURL_end <- "&plot=short&r=json&tomatoes=true"
  moovURL <- paste0(movieURL_start, movieID, movieURL_end)
  if (showRequest == TRUE) {
    print(paste("Sending request: ", moovURL)) 
  }
  as.data.frame(jsonlite::fromJSON(moovURL), stringsAsFactors=FALSE)
}
# build initial data frame from first record:
movE_data <- get_json_movieRecord(IMDB_mvIDs[1,], TRUE)
movE_data[ ,1:6]
print(paste0("Num Cols: ", NCOL(movE_data)))
```

此单元格会触发错误。第165行与开始循环的行相关联,因此它可能在函数调用上窒息,该函数调用使json呼叫在其中:

```{r p5getDatawDelay}
for (i in 2:250) {
  # declared ahead of the loop and then added to within the loop
  # in theory, this should yield better performance:
  movE_data <- rbind(movE_data, get_json_movieRecord(IMDB_mvIDs[i,]))
  if (i %% 2 == 0) {   # Add delay to every other request ...
    cDelayRtn <- causeDelay(3.7)
  }
}
write.csv(movE_data, file='IMDB_Top250_OMDB_Detailed.csv')
movE_data[1:6, 1:6]
paste0("Number Rows: ", NROW(movE_data))
paste0("Number Cols: ", NCOL(movE_data))
```

有关完整性...上面的代码可以调用它在其中具有此延迟功能的早期单元格:

```{r p5addTimeDelayFunc, echo=T, eval=T}
causeDelay <- function(x, showDelay = FALSE)
{
  p1 <- proc.time()
  Sys.sleep(x) # nothing happens for x seconds
  if (showDelay == TRUE) {
    proc.time() - p1
  }
} 
print("Text")
causeDelay(3.7, TRUE)
print("Text after delay.")
print("")
print("Text2")
causeDelay(3.7)
print("Text after delay.")
```

我想我可能在这里看到答案。我在2或3个编织尝试中遇到了同样的错误,并且每一个都需要更多的10分钟才能达到错误点,这不是您要重新进行多次的过程。但是,在进行表面编辑(评论的删除)之后,再次击中针织按钮会导致新错误,这与本文中显示的内容不同。

此标价文档的完整代码将需要一个小时或更长时间才能单击并重新运行每个单元格 时间重新连接。即使每个单元格都从以前的成功尝试中运行(在Markdown文档中仍然可以看到输出),但我现在怀疑某些东西不再适当地缓存。解决方案可能就是这样做的:重新运行每个单元格,然后重新尝试rstudio编织按钮。

如果有人知道在这种情况下尝试的其他事情,请发表。否则,我正在研究一个漫长的过程,我将在赶上其他工作后稍后开始。

最新更新