Spécification des variables dans une fonction
Bonjour,
Lorsque l'on utilise la fonction lm (par exemple) sous R, on écrit :
Code:
lm(variable1 ~ variable2, data=matable)
Et la fonction lm "comprend" qu'elle doit prendre la variable qui s'appelle "variable1" dans la table "matable".
Ce que j'aimerais, c'est pouvoir faire de même dans une fonction que j'aurais moi-même créée, c'est-à-dire pouvoir écrire :
Code:
mafonction(variable1, variable2, matable)
si ma fonction se présente sous la forme :
Code:
mafonction <- (var1, var2, data)
plutôt que de faire :
Code:
mafonction(matable$variable1, matable$variable2)
avec une fonction se présentant sous la forme :
Code:
mafonction <- (var1, var2)
N'hésitez pas à me demander des précisions si je n'ai pas été assez claire dans mes explications.
Merci d'avance
utilisation des lazy evaluation
Code:
1 2 3 4 5 6 7 8 9 10
|
f <- function(x1, y1, data) {
cl <- match.call()
mt <- match(c('x1', 'y1'), table=names(cl))
mt <- mt[mt != 0]
x1 <- data[, as.character(cl)[mt[1]]]
x2 <- data[, as.character(cl)[mt[2]]]
print(x1)
print(x2)
} |
ce code te permet de passer des noms de variables sans utiliser les quottes.
ce code fait également appel à un mécanisme appelé lazy evaluation, qui consiste à ne pas évaluer les arguments passés à une fonction jusqu'à ce ceux-ci soient utilisés.