2012-06-05 31 views
5

Tôi đang tìm kiếm một cách để lưu trữ lần chạy trong một biến trong R. Trong MATLAB ai có thể làm điều gì đó dọc theo dòng:Lưu trữ giá trị toc tic trong R

tic;
...
x = toc;

và sau đó thời gian chạy được lưu trữ trong biến x. Tôi đã thử làm điều tương tự với hàm tic() toc() trong R đến từ gói MATLAB mà không thành công. Hơn nữa tôi không thể thấy làm thế nào điều này có thể được thực hiện bằng cách sử dụng chức năng system.time() của R không. Bất kỳ sự trợ giúp nào ở đây đều được đánh giá cao.

+0

Câu hỏi trùng lặp: http://stackoverflow.com/questions/1716012/stopwatch-function-in-r –

+1

@VincentZoonekynd: Tôi đã hỏi cách lưu trữ. –

+1

@StefanHansen: bạn lưu trữ nó giống như bạn lưu trữ bất kỳ giá trị biến khác ... '<-'. –

Trả lời

12

Sử dụng được xây dựng trong system.time chức năng:

tm1 <- system.time(
{ 
    #your code here 
}) 

hoặc, cách khác các benchmark chức năng từ rbenchmark gói:

tm2 <- benchmark(
{ 
    #your code here 
}, replications=1) 
+0

Ồ, thật đơn giản. Cảm ơn :) –

12

More tương tự như tictoc và đôi khi handier ví dụ đối với thông điệp trạng thái trong vòng lặp:

start <- Sys.time() 
do.something() 
Sys.time() - start 
2

Hoặc bạn có thể làm như được mô tả trong gói '.titoc'.

tic("timer") 
1+1 
toc(log = TRUE, quiet = TRUE) 
log.txt <- tic.log(format = TRUE) 
tic.clearlog() 

đầu ra của bạn sau đó được lưu trữ trong log.txt. Bạn có thể unlist(log.txt) và phân tích nó dưới dạng chuỗi nếu bạn chỉ muốn thời gian tính bằng giây.

Chúc mừng,

1

Gói tictoc thực hiện chức năng này chính xác, vì vậy thời gian của timings tuần tự hoặc lồng nhau được lưu trữ trong một danh sách và để phân tích tiếp theo.

Ví dụ: với thời gian mỗi lần lặp của vòng lặp và phân tích kết quả sau, hãy sử dụng chức năng log.

library(tictoc) 
tic.clearlog() 
for (x in 1:10) { 
    # passing x to tic() makes it a label at time of the matching toc() call. 
    tic(x) 
    Sys.sleep(1) 
    # When log = TRUE, toc() pushes the measured timing to a list 
    # quiet = TRUE prevents from printing the timing 
    toc(log = TRUE, quiet = TRUE) 
} 

Tìm nạp kết quả của toc() dưới dạng văn bản được định dạng để in.

log.txt <- tic.log(format = TRUE) 

Trích xuất danh sách chứa các số đo ở định dạng thô.

log.lst <- tic.log(format = FALSE) 

Vì dữ liệu đã được trích xuất, hãy xóa nhật ký tictoc.

tic.clearlog() 

Chuyển đổi các yếu tố danh sách thành thời gian. Mỗi phần tử trong danh sách có dấu thời gian bắt đầu (tic) và kết thúc (toc).

timings <- unlist(lapply(log.lst, function(x) x$toc - x$tic)) 

Tính toán thời gian vòng trung bình.

mean(timings) 
# [1] 1.001 

In đầu ra văn bản - lưu ý rằng tiền tố là giá trị x.

writeLines(unlist(log.txt)) 
# 1: 1.002 sec elapsed 
# 2: 1 sec elapsed 
# 3: 1.002 sec elapsed 
# 4: 1.001 sec elapsed 
# 5: 1.001 sec elapsed 
# 6: 1.001 sec elapsed 
# 7: 1.001 sec elapsed 
# 8: 1.001 sec elapsed 
# 9: 1.001 sec elapsed 
# 10: 1 sec elapsed 
Các vấn đề liên quan