In vielen Programmiersprachen übergibt man Argumente an Funktionen,
z.B. meineFunktion(20)
, und würde da zum Beispiel stehen: meineFunktion(10+10)
,
dann wird zuerst 10+10
gerechnet, und dann doch meineFunktion(20)
aufgerufen.
Das ist in R grundsätzlich erstmal auch so.
meineFunktion <- function(x){ print(x) } meineFunktion(20) meineFunktion(10+10)
Aber man kann in der Funktion definieren, dass dem doch nicht so sein soll.
Das Konzept nennt sich lazy evaluation: Ein Wert wird erst Berechnet, wenn er auch gebraucht wird.
Mit der Funktion substitute()
kann ich in einer Funktion festlegen, dass ich nicht das Ergebnis von 10+10
haben will, sondern den Code selbst.
meineFunktion <- function(x){ x <- substitute(x) print(mode(x)) print(x) } meineFunktion(20) meineFunktion(10+10)
Dabei fällt auf dass im Falle der Zahl 20 diese auch als Zahl erkannt ist, während 10+10
als ‚call‘ erkannt wird. Das ist nämlich die Funktion +
die Aufgerufen wird. In R lässt sich der Funktionsaufruf auch so schreiben:
'+'(10,10)
Ausführen lässt sich der Code über die eval()
-Funktion, und kann zum Beispiel in einem tryCatch()
verwendet werden.
x <- substitute(10+10) eval(x)