system.time(…) misst die Zeit, die R benötigt, um den Befehl in der Klammer auszuführen. Dabei wird der Befehl auch tatsächlich ausgeführt, d.h. findet in der Klammer eine Variablenzuordnung statt, ist die Variable danach auch verfügbar.
Es wird ein Vektor vom Typ proc_time mit 5 Einträgen zurückgegeben: user, system und elapsed (verstrichene) Zeit des R-Prozesses sowie die kummulierten User und System-Zeiten aller Child-Prozesse. Die Anzeige in der Konsole bzw. durch den print-Befehl gibt nur 3 Werte zurück, nämlich die User-Zeit vom Haupt-Prozess plus aller Child-Prozesse, die System-Zeit vom Haupt-Prozess plus aller Child-Prozesse sowie die tatsächlich verstrichene Zeit. Das entspricht dem summary-Befehl der Klasse proc.time
Was sind User- und System-Zeit?
“User CPU time” gibt die CPU Zeit, die der aktuelle Prozess benötigt hat, während “system CPU time” die Zeit ist, die die CPU für Betriebssystem-Prozesse (Öffnen von Dateien, andere Prozesse starten etc.) benötigt. Als Anwender interessiert uns vor allem der dritte Parameter, also die tatsächlich verstrichene Zeit.
Beispiel
system.time(x <- rnorm(1000000)) # User System verstrichen #0.09 0.00 0.10 a <- system.time(for (i in 1:10) rnorm(1000000)) class(a) [1] "proc_time" names(a) [1] "user.self" "sys.self" "elapsed" "user.child" "sys.child" a[1:5] # user.self sys.self elapsed user.child sys.child # 9.44 0.19 9.69 NA NA
Wer tiefer einsteigen möchte, schaut sich mal das Package microbenchmark an, welches mehrere Berechnungen vergleichen kann.