在R中使用file()每天将数据流传输到两个文件
解决方案:将格式(Sys.time(),“%H”)包装为as.numeric时,下面的代码可以工作 我使用streamR从Twitter的流式API中获得了恒定的数据流。我正在使用streamR的代码,streamR是一个处理Twitter流式API数据的包。我希望数据每天进入两个不同的文件。使用下面的代码,我尝试每天将数据流传输到两个不同的文件中(一个在中午12点之后,一个在中午12点之前),但它似乎不起作用。下面是流媒体所需的代码,它是streamR中更大的函数filterStream的一部分(整个函数的代码可根据要求提供;我意识到,如果没有API应用程序,这是不容易复制的。)在R中使用file()每天将数据流传输到两个文件,r,api,file,twitter,R,Api,File,Twitter,解决方案:将格式(Sys.time(),“%H”)包装为as.numeric时,下面的代码可以工作 我使用streamR从Twitter的流式API中获得了恒定的数据流。我正在使用streamR的代码,streamR是一个处理Twitter流式API数据的包。我希望数据每天进入两个不同的文件。使用下面的代码,我尝试每天将数据流传输到两个不同的文件中(一个在中午12点之后,一个在中午12点之前),但它似乎不起作用。下面是流媒体所需的代码,它是streamR中更大的函数filterStream的一部
conn 0){
打开(conn2,open=“a”)
写线(x,conn2,sep=“”)
}
}
如果(!is.null(oauth)){
除了格式(Sys.time(),“%H”)
之外,不能解释所有内容的url应该用包装为.numeric
。或者,如果您对示例部分不完全诚实,它可能是唯一的错误。@flodel,为什么需要包装?这对我来说是正确的:“13”>12
。因为R会将12转换为“12”和比较字符串。查看之间的区别。character(0:23)>12
和0:23>12
@flodel,非常简单…感谢您的耐心!恐怕我在某些地方使用过这种比较…:-0格式(Sys.time(),“%H”)
将返回一个字符串:从“0”
到“23”
。所有可能的值都是as.character(0:23)
。现在请自己看看as.character(0:23)>=12
不是您想要的。它可能符合您的期望(0:23>=12
)一些小时的数据,但不是全部。因此需要按照我的建议使用as.numeric
来修复代码的这一部分。
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)
}