J'ai une fonction f
qui prend deux paramètres (p1
Et p2
):
Si pour le paramètre p2
Aucune valeur n'a été transmise à la fonction, la valeur de p1
^ 2 doit être utilisée à la place. Mais comment puis-je savoir dans la fonction, si une valeur est donnée ou non. Le problème est que la variable p2
N'est pas initialisée s'il n'y avait pas de valeur. Ainsi, je ne peux pas tester si p2
Est NULL
.
f <- function(p1, p2) {
if(is.null(p2)) {
p2=p1^2
}
p1-p2
}
Est-il possible de vérifier si une valeur pour p2
A été transmise à la fonction ou non? (Je n'ai pas pu trouver une fonction isset()
- ou des choses similaires.)
Vous utilisez la fonction missing()
pour cela.
f <- function(p1, p2) {
if(missing(p2)) {
p2=p1^2
}
p1-p2
}
Vous pouvez également définir la valeur de p2 sur NULL par défaut. Je préfère parfois cette solution, car elle permet de passer des arguments aux fonctions imbriquées.
f <- function(p1, p2=NULL) {
if(is.null(p2)) {
p2=p1^2
}
p1-p2
}
f.wrapper <-function(p1,p2=NULL){
p1 <- 2*p1
f(p1,p2)
}
> f.wrapper(1)
[1] -2
> f.wrapper(1,3)
[1] -1
EDIT: vous pouvez le faire techniquement avec missing()
également, mais vous devrez également inclure une instruction missing()
dans f.wrapper
.
Je pense que "? Manquant" devrait le faire.
Dans un cas comme celui-ci, vous pouvez également utiliser quelque chose comme ceci:
f <- function(p1, p2 = p1 ^ 2) {
p1-p2
}
Voir la partie sur l'évaluation paresseuse sur http://adv-r.had.co.nz/Functions.html