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