2017-09-07 1 views
0

Nicht sicher, ob dies möglich ist, aber eine Frage wert. Ich muss in der Lage sein, eine Funktion zu ändern, die in die globale Umgebung geladen wird. Zum Beispiel können sagen, dass ich eine Funktion hatte wie die folgenden, dass der Median eines Vektors zurückFunktion in globaler Umgebung ändern

myVec<-c(1,2,3,4,5,5,5,6,7,8,9,10) 

average<-function(x){ 
    median(x) 
} 

average(myVec) 

Nun wollte ich die Funktion zum Aktualisieren der Mittelwert zurückzukehren, aber ohne die Gesamtstruktur der Funktion zu ändern, so möchte ich Update average() so wird es

average<-function(x){ 
    mean(x) 
} 

Ist das möglich? Ich rate eine Form des Schreibens der Funktion in eine temporäre Datei und Aufruf readLines() und writeLines(), aber bis jetzt hatte ich keinen Erfolg.

+2

Wenn Sie den gesamten Körper der Funktion überschrieben werden sollen, gibt es 'Körper (Durchschnitt) <- Zitat (Mittelwert (x))'. Das Umschreiben einer vorhandenen Funktion auf einer feineren Ebene kann schäbig werden, denke ich. – Frank

+0

Wenn Sie eine Funktion zweimal definieren, überschreibt die neuere die ältere, so dass die neuere Funktion verwendet wird. –

+0

Die Funktion, die ich ändern muss, ist komplexer, daher möchte ich sie nicht einfach neu definieren. Ich muss nur eine Zeile aus dem Speicher ändern und dann an eine Liste anhängen und die Liste speichern. – MorganBall

Antwort

1

Ich glaube, Sie einen Verschluss bedeuten:

myVec<-c(1,2,3,4,5,5,5,6,7,8,9,10) 

# this will create your function 
create.average <- function (fun) { 
    my.average <- function (x) { 
    fun(x) 
    } 
    return(my.average) 
} 
# define average as mean 
average <- create.average(mean) 
average(myVec) 
mean(myVec) # only to verify result 

# re-define average as median 
average <- create.average(median) 
average(myVec) 
median(myVec) # only to verify result 
+0

Sorry nicht, was ich suche. Frank hat es mit 'Körper (Durchschnitt) <- Zitat (Mittelwert (x))' – MorganBall

Verwandte Themen