Angenommen, ich brauche brauchen, um aus irgendeinem Grund die Zeilen in einem Datenrahmen zu durchlaufen.Schleifen über Zeilen in einem Datenframe
ich eine einfache data.frame
df <- data.frame(id = sample(1e6, 1e7, replace = TRUE))
Es scheint, dass f2 viel langsamer als f1 ist, während ich sie äquivalent zu erwarten.
f1 <- function(v){
for (obs in 1:(1e6)){
a <- v[obs]
}
a
}
system.time(f1(df$id))
f2 <- function(){
for (obs in 1:(1e6)){
a <- df$id[obs]
}
a
}
system.time(f2())
Würdest du wissen warum? Verwenden sie genau die gleiche Menge an Speicher?
Mit der ersten Funktion, die Sie '$' einmal verwenden, in der zweiten Funktion Du benutzt es 1e6 mal. '$' ist nicht die schnellste Teilmengenfunktion. – Roland
Was mich verblüfft ist, dass 'f1' doppelt so schnell ist wie' f3 <- function (v) für (a in v) {NULL}; system.time (f3 (df $ id)) '. Oh, ich sehe: '1e6' ist nicht die volle Länge des Vektors. 'system.time (f3 (df $ id [1: 1e6]))' ist schnell. – Frank