2016-04-27 26 views
2

machen Gibt es eine Möglichkeit, eine Funktion in R mit einer aus einer Variablen bestimmten Konstante zu definieren? Ich bin mir nicht sicher, wie ich das besser sagen soll, hier ist ein Beispiel.Eine Variable in einer Funktion in R

> index<-3 
> f<-function(x){x+index} 
> f(4) 
[1] 7  #Great! 
> index<-20 
> f(4) 
[1] 24 #No! I still want to see 7! 

Vielen Dank!

+4

Advanced R's Kapitel über die Umwelt scheint relevant: http://adv-r.had.co.nz/Environments.html – paljenczy

+1

Vielleicht möchte http://stackoverflow.com/q/1169534 – BenBarnes

+0

So ging ich letztlich mit BenBarnes Ansatz für die kurze Zeit, aber wird weiter über Umgebungen lesen, wie von Paljenczy vorgeschlagen, um hoffentlich etwas etwas "Schöneres" zu finden. Danke euch beiden! – Rubarb

Antwort

2

Eine mögliche Lösung ist Ihre Funktion innerhalb einer anderen Funktion zu definieren:

g <- function(index){ 
    function(x) x + index 
} 
index <- 3 
f <- g(index) 
f(4) 
index<-20 
f(4) 

Nun ist die Ausgabe von g(index) eine Funktion ist, die innerhalb definiert ist die (Ausführungs-) Umgebung von g. Diese Funktion (f) wird den Wert von index in dieser Umgebung betrachten, wo es auf 3 festgelegt ist. Deshalb funktioniert es, aber vielleicht gibt es eine einfachere Lösung.

+0

Danke! Dies sieht so aus, als ob BenBarnes in einem Kommentar oben vorgeschlagen hätte, aber ich habe es nicht verstanden, bis ich deine Lösung gelesen habe. – Rubarb

2

Suchen Sie nach ?lockBinding, Ihre Antwort ist here

index <- 3 
lockBinding("index", globalenv()) 
index <- 4 
#> Error: cannot change value of locked binding for 'index' 
+0

Vielen Dank, aber ich würde gerne in der Lage sein, den Wert von "index" zu ändern, nachdem die Funktion definiert wurde. Im Idealfall würde ich, wenn ich die Funktion betrachte, folgendes sehen: function (x) {x + 3}. – Rubarb

Verwandte Themen