Frage

Ich habe eine Funktion in R, die ich mehrmals aufrufen. Ich will den Überblick über die Anzahl der Zeit Schritt halten, dass ich es genannt habe, und dass Entscheidungen zu treffen, verwende auf, was in der Funktion zu tun. Hier ist, was ich jetzt haben:

f = function( x ) {
   count <<- count + 1
   return( mean(x) )
}

count = 1
numbers = rnorm( n = 100, mean = 0, sd = 1 )
for ( x in seq(1,100) ) {
   mean = f( numbers )
   print( count )
}

Ich mag es nicht, dass ich die variable Zählung außerhalb des Bereichs der Funktion zu erklären haben. In C oder C ++ Ich konnte nur eine statische Variable machen. Kann ich eine ähnliche Sache in der R Programmiersprache tun?

War es hilfreich?

Lösung

Hier ist ein Weg, um eine Schließung durch die Verwendung (im Sinne Programmiersprache), das heißt speichert die Zählvariable in einer einschließenden Umgebung zugänglich nur durch Ihre Funktion:

make.f <- function() {
    count <- 0
    f <- function(x) {
        count <<- count + 1
        return( list(mean=mean(x), count=count) )
    }
    return( f )
}

f1 <- make.f()
result <- f1(1:10)
print(result$count, result$mean)
result <- f1(1:10)
print(result$count, result$mean)

f2 <- make.f()
result <- f2(1:10)
print(result$count, result$mean)
result <- f2(1:10)
print(result$count, result$mean)

Andere Tipps

Hier ist ein anderer Ansatz. Dies erfordert weniger tippen und (meiner Meinung nach) besser lesbar:

f <- function(x) {
    y <- attr(f, "sum")
    if (is.null(y)) {
        y <- 0
    }
    y <- x + y
    attr(f, "sum") <<- y
    return(y)
}

Dieser Code-Schnipsel sowie komplexere Beispiel für das Konzept kann durch gefunden in diesem R-Bloggers Artikel

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top