For-Schleife vs While-Schleife in R

Habe ich bemerkt, eine seltsame Sache, die während Ihrer Arbeit in R.
Wenn ich ein einfaches Programm, das berechnet die Quadrate von 1 bis N, implementiert unter Verwendung von for-Schleife und while-Schleife, das Verhalten ist nicht das gleiche. (I don ' T care über Vektorisierung in diesem Fall oder anwenden von Funktionen).

fn1 <- function (N) 
{
    for(i in 1:N) {
        y <- i*i
    }
}

UND

fn2 <- function (N) 
{
    i=1
    while(i <= N) {
        y <- i*i
        i <- i + 1
    }
}

Sind die Ergebnisse:

system.time(fn1(60000))
   user  system elapsed 
  2.500   0.012   2.493 
There were 50 or more warnings (use warnings() to see the first 50)
Warning messages:
1: In i * i : NAs produced by integer overflow
.
.
.

system.time(fn2(60000))
   user  system elapsed 
  0.138   0.000   0.137 

Nun wissen wir, dass die for-Schleife ist schneller, meine Vermutung ist, da der pre-Allokation und Optimierungen gibt. Aber warum ist es überlaufen?

UPDATE: So, jetzt versuchen einen anderen Weg mit Vektoren:

fn3 <- function (N) 
{
    i <- 1:N
    y <- i*i
}
system.time(fn3(60000))
   user  system elapsed 
  0.008   0.000   0.009 
Warning message:
In i * i : NAs produced by integer overflow

So Vielleicht seine eine funky Speicher-Problem? Ich bin unter OS X mit 4Gb Speicher und alle Standard-Einstellungen in R. Dies geschieht in 32 - und 64-bit-Versionen (außer, die Zeiten sind schneller).

Alex

InformationsquelleAutor der Frage Alex | 2010-11-17

Schreibe einen Kommentar