Apakah ada cara standar dalam R mengukur waktu eksekusi fungsi?
Jelas saya dapat mengambil system.time
sebelum dan sesudah eksekusi dan kemudian mengambil perbedaannya, tetapi saya ingin tahu apakah ada beberapa cara atau fungsi standar (ingin tidak menemukan roda).
Sepertinya saya ingat bahwa saya pernah menggunakan sesuatu seperti di bawah ini:
somesysfunction("myfunction(with,arguments)")
> Start time : 2001-01-01 00:00:00 # output of somesysfunction
> "Result" "of" "myfunction" # output of myfunction
> End time : 2001-01-01 00:00:10 # output of somesysfunction
> Total Execution time : 10 seconds # output of somesysfunction
proc.time
di pikiran sebabsystem.time
adalah salah satu yang Anda butuhkan.Rprof
bagus. Ini memberikan profil dari semua proses dalam sepotong kode / fungsi.require(microbenchmark)
sekarang (sejak beberapa tahun yang lalu) adalah cara standar komunitas untuk menentukan waktu.times <- microbenchmark( lm(y~x), glm(y~x), times=1e3); example(microbenchmark)
. Ini melakukan statistik perbandinganlm
vsglm
lebih dari 1000 mencoba, daripadasystem.time
pengujian hanya sekali.res <- microbenchmark(your code1,your code2)
dan kemudianprint(res)
untuk melihat tabel atauggplot2::autoplot(res)
untuk melihat boxplot! refJawaban:
Cara lain yang memungkinkan untuk melakukan ini adalah dengan menggunakan Sys.time ():
Bukan cara yang paling elegan untuk melakukannya, dibandingkan dengan jawaban di atas, tetapi jelas cara untuk melakukannya.
sumber
Sys.time
, silakan baca ini untuk beberapa peringatan: Kode waktu R dengan Sys.time ()system.time()
lebih cepat bagi saya. Saya pikir jawaban itusystem.time()
harus diterima!Fungsi bawaan
system.time()
akan melakukannya.Gunakan seperti:
system.time(result <- myfunction(with, arguments))
sumber
system.time()
memiliki argumengcFirst
yang secaraTRUE
default. Ini di satu sisi membuat pengukuran sedikit lebih dapat direproduksi tetapi dapat menghasilkan overhead yang signifikan dari total waktu run (yang tidak diukur, tentunya).system.time(result <- myfunction(with, arguments))
dan mendapat 187.564 sebagai output - apakah itu dalam hitungan detik atau apa?system.time
, harap baca ini untuk beberapa peringatan: kesalahan "objek tidak ditemukan" dan "simbol tak terduga" ketika timing kode R dengan system.time () .Seperti yang dikatakan Andrie,
system.time()
bekerja dengan baik. Untuk fungsi pendek, saya lebih suka memasukkanreplicate()
:sumber
Cara yang sedikit lebih baik untuk mengukur waktu eksekusi, adalah dengan menggunakan paket rbenchmark . Paket ini (mudah) memungkinkan Anda menentukan berapa kali mereplikasi tes Anda dan akan menjadi patokan relatif seharusnya.
Lihat juga pertanyaan terkait di stats.stackexchange
sumber
microbenchmark
adalah paket ringan (~ 50kB) dan lebih-atau-kurang cara standar dalam R untuk membandingkan berbagai ekspresi dan fungsi:Sebagai contoh:
Di sini kedua ekspresi dievaluasi 10.000 kali, dengan waktu eksekusi rata-rata sekitar 25-30 ns.
sumber
Ada juga
proc.time()
Anda dapat menggunakan dengan cara yang sama seperti
Sys.time
tetapi memberi Anda hasil yang mirip dengansystem.time
.perbedaan utama antara menggunakan
adalah bahwa
proc.time()
metode ini masih menjalankan fungsi Anda bukan hanya mengukur waktu ... dan omong-omong, saya suka menggunakansystem.time
dengan{}
di dalam sehingga Anda dapat menempatkan satu set hal ...sumber
Paket "tictoc" memberi Anda cara yang sangat sederhana untuk mengukur waktu eksekusi. Dokumentasinya ada di: https://cran.fhcrc.org/web/packages/tictoc/tictoc.pdf .
Untuk menghemat waktu yang telah berlalu ke dalam variabel, Anda dapat melakukan:
sumber
Meskipun solusi lain berguna untuk fungsi tunggal, saya merekomendasikan potongan kode berikut ini di mana lebih umum dan efektif:
sumber
microbenchmark
atauprofvis
.Cara lain yang sederhana namun sangat kuat untuk melakukan ini adalah dengan menggunakan paket
profvis
. Itu tidak hanya mengukur waktu eksekusi kode Anda tetapi memberi Anda menelusuri untuk setiap fungsi yang Anda jalankan. Ini dapat digunakan untuk Shiny juga.Klik di sini untuk beberapa contoh.
sumber
Anda dapat menggunakan fungsi
tic
-toc
fungsi MATLAB , jika diinginkan. Lihat pertanyaan SO lainnya iniFungsi stopwatch di R
sumber
proc.time()
Akan menambahkan ... Saya suka nama lucu lebih baik. =)