Le langage R est une fonctionnalité utile pour définir des fonctions qui peuvent prendre un nombre variable d'arguments. Par exemple, la fonction data.frame
prend un nombre quelconque d'arguments, et chaque argument devient les données d'une colonne dans la table de données. Exemple d'utilisation:
> data.frame(letters=c("a", "b", "c"), numbers=c(1,2,3), notes=c("do", "re", "mi"))
letters numbers notes
1 a 1 do
2 b 2 re
3 c 3 mi
La fonction de signature comprend les points de suspension, comme ceci:
function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE,
stringsAsFactors = default.stringsAsFactors())
{
[FUNCTION DEFINITION HERE]
}
Je voudrais écrire une fonction qui fait la même chose, en prenant plusieurs valeurs et de les regrouper en une seule valeur de retour (ainsi que d'autres de traitement). Pour ce faire, j'ai besoin de comprendre comment faire pour "décompresser" l' ...
de les arguments de la fonction au sein de la fonction. Je ne sais pas comment faire. La ligne correspondante dans la définition de la fonction d' data.frame
est object <- as.list(substitute(list(...)))[-1L]
, ce qui je ne peux pas donner un sens.
Alors, comment puis-je convertir le bouton de sélection de la fonction de signature, par exemple, dans une liste?
Pour être plus précis, comment puis-je écrire get_list_from_ellipsis
dans le code ci-dessous?
my_ellipsis_function(...) {
input_list <- get_list_from_ellipsis(...)
output_list <- lapply(X=input_list, FUN=do_something_interesting)
return(output_list)
}
my_ellipsis_function(a=1:10,b=11:20,c=21:30)
Modifier
Il semble qu'il y a deux façons de le faire. Ils sont as.list(substitute(list(...)))[-1L]
et list(...)
. Cependant, ces deux ne fait pas exactement la même chose. (Pour les différences, voir les exemples dans les réponses.) Quelqu'un peut-il me dire quelle est la différence concrète entre eux, et avec qui je devrais utiliser?