Récupérer le nom des arguments d'une fonction
Bonjour.. Je souhaiterais utiliser une fonction f ayant comme argument une liste de data.frame et pouvoir utiliser dans le corps de cette fonction le nom de ces dataframes. J'avais imaginé que la fonction f pourrait ressembler à quelque chose comme :
f <- fonction(liste) {
nom1 <- deparse(substitute(liste[[1]])
print(nom1)
# etc...
}
et l'appel à :
ma_liste <- liste(df1,df2)
f(ma_liste)
(je voudrais donc que l'instruction "print" m'affiche "df1" mais ce n'est pas le cas !)
Récupérer le nom des arguments d'une fonction
Bonjour,
Ça dépend de ce que vous voulez faire.
Si on s'en tient au titre de votre message "Récupérer le nom des arguments d'une fonction", la commande deparse(substitute()) fonctionne parfaitement à condition de passer les arguments en paramètres et non sous forme d'objet liste (ce qui est "normal" parce que la commande renvoie le paramètre entre guillemets).
Code:
1 2 3 4 5 6 7 8 9 10
| > f1 <- function(var1, var2) {
+ nom1 <- deparse(substitute(var1))
+ print(nom1)
+ nom2 <- deparse(substitute(var2))
+ print(nom2)
+ }
>
> f1(iris, cars)
[1] "iris"
[1] "cars" |
Si vous souhaitez passer par une liste, vous pouvez nommer les éléments de la liste et utiliser la fonction names() pour récupérer le nom des éléments :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| > f2 <- function(liste) {
+ nom1 <- names(liste[1])
+ print(nom1)
+ nom2 <- names(liste[2])
+ print(nom2)
+ }
>
> ma_liste <- list(iris, cars)
> names(ma_liste) <- c("iris", "cars")
> f2(ma_liste)
[1] "iris"
[1] "cars" |
Remarquez que la liste ne contient pas le nom des éléments si vous ne les nommez pas :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| > ma_liste <- list(iris, cars)
> str(ma_liste)
List of 2
$ :'data.frame': 150 obs. of 5 variables:
..$ Sepal.Length: num [1:150] 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
..$ Sepal.Width : num [1:150] 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
..$ Petal.Length: num [1:150] 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
..$ Petal.Width : num [1:150] 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
..$ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
$ :'data.frame': 50 obs. of 2 variables:
..$ speed: num [1:50] 4 4 7 7 8 9 10 10 10 11 ...
..$ dist : num [1:50] 2 10 4 22 16 10 18 26 34 17 ... |
Cordialement,