promesses
Quand un argument est passé à une fonction, il n'est pas passée comme une valeur, mais il est passé comme une promesse qui se compose de
- l'expression ou le code que l'appelant utilise comme argument réel
- l'environnement dans lequel cette expression est évaluée, viz. l'appelant de l'environnement.
- la valeur de l'expression représente quand l'expression est évaluée dans la promesse de l'environnement -- cette fente n'est pas rempli, jusqu'à ce que la promesse est réellement évalué. Il ne sera jamais remplie si la fonction ne jamais y accéder.
Le pryr package peut afficher les infos dans une promesse:
library(pryr)
g <- function(x) promise_info(x)
g(ggplot2)
donner:
$code
ggplot2 <-- the promise x represents the expression ggplot2
$env
<environment: R_GlobalEnv> <-- if evaluated it will be done in this environment
$evaled
[1] FALSE <-- it has not been evaluated
$value
NULL <-- not filled in because promise has not been evaluated
Le seul au-dessus des fentes dans la pryr de sortie qui peut être consulté au niveau R sans écrire une fonction C pour le faire (ou à l'aide d'un package comme pryr qui accède à un tel code C) est le code de la fente. Qui peut être fait à l'aide de la fonction R substitute(x)
(ou par d'autres moyens). En termes de pryr de sortie substitute
appliqué à une promesse renvoie le code de la fente sans évaluation de la promesse. C'est la valeur fente n'est pas modifié. Si on l'avait consulté x
de manière ordinaire, c'est à dire pas par l'intermédiaire d' substitute
, puis le code aurait été évalués dans la promesse de l'environnement, stocké dans la valeur de la fente et ensuite transmis à l'expression de la fonction qui y accède.
Donc soit le résultat suivant dans une chaîne de caractères représentant ce qui a été transmis comme une expression, c'est à dire la représentation des caractères du code du logement, par opposition à sa valeur.
f <- function(x) as.character(substitute(x))
f("ggplot2")
## [1] "ggplot2"
f(ggplot2)
## [1] "ggplot2"
bibliothèque
En fait, library
utilise ce langage, c'est à dire as.character(substitute(x))
, à manipuler son premier argument.
aes
L' aes
fonction match.call
pour obtenir l'ensemble de l'appel comme une expression et donc, en un sens, est une alternative à l' substitute
. Par exemple:
h <- function(x) match.call()
h(pi + 3)
## h(x = pi + 3)
Note
On ne peut pas dire sans regarder la documentation ou le code d'une fonction de comment il va traiter ses arguments.