2

解决方案:当您将 format(Sys.time(), "%H") 包装在 as.numeric 中时,以下代码有效。

我有一个使用 R 从 Twitter 的 Streaming API 输入的恒定数据流。我正在使用来自 streamR 的代码,它是一个用于处理来自 Twitter 的流 API 数据的包。我希望每天输入的数据进入两个不同的文件。使用下面的代码,我尝试每天将数据流式传输到两个不同的文件中(一个在中午 12 点之后,一个在中午 12 点之前),但它似乎不起作用。下面是流式传输所需的代码,它是 streamR 中较大的函数 filterStream 的一部分(整个函数的代码可根据要求提供;我意识到如果没有 API 应用程序,这很难重现。)

conn <- file(description = "after12.json")
conn2 <- file(description = "before12.json")

    write.tweets <- function(x) {
      if (nchar(x) > 0 && format(Sys.time(), "%H") >= 12){
        open(conn, open="a")
        writeLines(x, conn, sep = "")
      } else if (nchar(x) > 0) {
        open(conn2, open="a")
        writeLines(x, conn2, sep = "")
      } 
    }

    if (!is.null(oauth)){
        url <- "https://stream.twitter.com/1.1/statuses/filter.json"
        output <- tryCatch(oauth$OAuthRequest(URL=url, params=params, method="POST", 
            customHeader=NULL, timeout = timeout, writefunction = write.tweets, 
            cainfo=system.file("CurlSSL", "cacert.pem", package = "RCurl")), 
                error=function(e) e)
        close(conn)
    }

流似乎只进入一个文件,并且不会在 12 处切换。问题似乎是写入函数将数据引导到流开始时合适的文件中,而不是在流中切换。例如,如果我在上午 11 点开始流式传输,“before12.json”文件将被填充,但“after12.json”不会在 12 点开始填充。

这是正确的方法吗?我宁愿不停止 API 流并重新启动它。我丢失了数据,并且 API 可能会因重复连接而变得暴躁。

请让我知道我可能遗漏的任何解决方案或一般指示!谢谢!

编辑 1:我想说 write.tweets 函数在您自己尝试时确实有效。如果你告诉它写文本,它会按时切换时间。但是,流数据似乎不想在两者之间切换。

4

0 回答 0