2015-08-19 66 views
2

對於簡單的自制基準測試,我想在R腳本中添加一個計時器,以便知道它已運行多久。這是一個腳本,釋放大量的數據,因此可能需要一個多小時才能完成。因此,我正在尋找一種方法,告訴我腳本運行的確切時間。打印腳本在R中運行的時間

,我得到了當時的想法是:

old = getCurrentTime() 

# Do the rest of my script 

(new = getCurrentTime() - old) 

我不知道這是有道理的,但似乎做到這一點的最好辦法,而不必在後臺運行的計數器,通過比較腳本的開始時間以及時間和結束並打印差異。但是,我不確定如何在R中獲得時間,獲得差異,並將其格式化爲hh:mm:ss

+0

你的最後一段使得它聽起來像你想在鏈接的問題的答案。如果這不正確,請修改以顯示*確切*您想要什麼,我們將重新打開該問題。 –

回答

4

您可以使用Sys.time()

old <- Sys.time() # get start time 

# some code 
#... 

# print elapsed time 
new <- Sys.time() - old # calculate difference 
print(new) # print in nice format 

然而,也就是使用多個試驗等microbenchmark包更復雜的/精確的時序

+0

我想他想知道一些代碼,而不是一些代碼之後。 – nathanesau

+0

不知道你的意思,但考慮到OP要求*「我不知道如何獲得R的時間,得到的差異,並格式化在hh:mm:ss」*我覺得這個答案直接解決所有問題 – arvi1000

+0

假設您輸入一個.R文件,並且希望在程序運行時間歇地(即每10秒)打印一次運行時間。例如,當您在Linux上安裝軟件包時,在軟件包正在下載時會打印下載速度和時間。 – nathanesau

1

你的一般做法是正確的,可能是最傳統的方式無論編程語言如何,都可以實現這一點。但是,減去兩個POSIXt對象將爲您提供類difftime的對象,其中測量單位自動選擇(取決於差異的大小),而不是您要查找的「HH:MM:SS」格式。編寫一個函數返回這種格式非常簡單,例如像

hms_span <- function(start, end) { 
    dsec <- as.numeric(difftime(end, start, unit = "secs")) 
    hours <- floor(dsec/3600) 
    minutes <- floor((dsec - 3600 * hours)/60) 
    seconds <- dsec - 3600*hours - 60*minutes 
    paste0(
    sapply(c(hours, minutes, seconds), function(x) { 
     formatC(x, width = 2, format = "d", flag = "0") 
    }), collapse = ":") 
} 

(t0 <- Sys.time() - 3600 * 8.543) 
#[1] "2015-08-19 03:48:36 EDT" 
(t1 <- Sys.time()) 
#[1] "2015-08-19 12:19:24 EDT 
R> hms_span(t0, t1) 
#[1] "08:32:34"