Re: [问题] time loop

楼主: celestialgod (天)   2017-07-21 00:12:06
※ 引述《peterwu76 (金冈)》之铭言:
: : [问题类型]:
: : 程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
: : [软件熟悉度]:
: : 入门(写过其他程式,只是对语法不熟悉)
: : [问题叙述]:
: : 让R每5分钟执行一次资料下载
: 想让储存的档案名称变成数字,如第一笔档案为 1.xlsx,第二笔为 2.xlsx,
: 但一直喷错出来。
: 另外,如果用上篇的code,好像常常跑10小时就停了,没有跳出红字。
: : [程式范例]:
: cat(rep("\n",64))
: library(jsonlite)
: library(RCurl)
: library(httr)
: library(xlsx)
: for (i in 1:(60*24*5/5)){ #创建 i 等于数字
: while (TRUE) {
: if (format(Sys.time(), "%S") == "01") return("Downloading") else
: Sys.sleep(300)
: Dataurl<-url("https://airbox.edimaxcloud.com/devices?token=EA81A1FA-8EDB-
: 4CA0-B07B-A881C74B0401")
: DATA<-fromJSON(Dataurl)
: Table<-data.frame(DATA)
: Sites<-c("74DA38C7D1C2","74DA38C7D0B0","74DA38C7D1C4","74DA38C7D1CA",
: "74DA38C7D0A2","74DA38C7D0A0","74DA38C7D09C","74DA38C7D09E",
: "74DA38C7D0AE","74DA38C7D1D2","74DA38AF4860","74DA38AF47F8",
: "G0000000000E")
: Table <- subset(Table, devices.id %in% Sites)
: datenum <- i
: toString(datenum) # 将 i 命名为datenum再改为字串
: outfile = paste("D:\\", datenum, sep = "")
: write.xlsx(Table, file = outfile)
: }
: }
: : [环境叙述]:
: : R-Studio
: : [关键字]:
: : 选择性,也许未来有用
: : Sys.time sys.sleep time loop
其实可以写得很简单,请参考:
library(httr)
library(pipeR)
library(xlsx)
library(data.table)
url <- "https://airbox.edimaxcloud.com/devices"
Sites <- c("74DA38C7D1C2","74DA38C7D0B0","74DA38C7D1C4","74DA38C7D1CA",
"74DA38C7D0A2","74DA38C7D0A0","74DA38C7D09C","74DA38C7D09E",
"74DA38C7D0AE","74DA38C7D1D2","74DA38AF4860","74DA38AF47F8",
"G0000000000E")
while (TRUE) {
# i是从零点到现在共度过几分钟
i <- hour(Sys.time()) * 60 + minute(Sys.time())
# i不能被5整除的话,就休息一分钟,每分钟起来跑才不会漏
if (i %% 5 != 0) Sys.sleep(60)
# 直接取得资料,然后转成data.table后直接写出
GET(url, query = list(token = "EA81A1FA-8EDB-4CA0-B07B-A881C74B0401"),
user_agent("Chrome/59.0.3071.115")) %>>% content %>>% `[[`(2) %>>%
lapply(as.data.table) %>>% rbindlist %>>% `[`(id %in% Sites) %>>%
write.xlsx(file = paste0("D:/", i/5, ".xlsx"))
}
作者: peterwu76 (金冈)   2017-07-21 17:58:00
感谢前辈的分享!! 晚点试试看!

Links booklink

Contact Us: admin [ a t ] ucptt.com