2015-08-19 3 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" 
Смежные вопросы