Dans une fonction simple en utilisant ...
pour fournir une liste d'arguments, est-il possible que la fonction de trouver les noms des objets passés de la appelant environnement? Si c'est le cas, comment?R: obtenir les noms des arguments passés dans `` ...
Cela se pose dans le contexte de la question, printing matrices and vectors side by side, mais est probablement plus général. Dans ce contexte, les arguments ...
peuvent également inclure des chaînes de caractères, pour lesquelles aucun nom n'est requis. Voici mon MWE, où j'ai essayé d'utiliser deparse(substitute())
, mais en vain.
test_names <- function(...) {
# get arguments
args <- list(...)
chars <- sapply(args, is.character)
names <- sapply(args, function(x) if(is.character(x)) " " else deparse(substitute(x)))
names
}
Test:
A = matrix(c(0.5, 1, 3, 0.75, 2.8, 4), nrow = 2)
x = c(0.5, 3.7, 2.3)
y = c(0.7, -1.2)
b = A %*% x - y
> test_names(A, " * ", x, " - ", y, " = ", b)
[1] "X[[i]]" " " "X[[i]]" " " "X[[i]]" " " "X[[i]]"
>
Ma sortie souhaitée pour ce serait le vecteur de caractères de longueur 7:
[1] "A" " " "x" " " "y" " " "b"
Il est surprenant ici que les résultats sont tous X[[i]]
, quand il n'est pas X
mentionné nulle part.
Après @ la réponse de Roland, cela semble faire ce que je veux:
test_names2 <- function(...) {
argnames <- sys.call()
unlist(lapply(argnames[-1], as.character))
}
> test_names2(A, " * ", x, " - ", y, " = ", b)
[1] "A" " * " "x" " - " "y" " = " "b"
Vous obtenez ceux de lapply. Il ne conserve pas les noms de liste. – Roland
Modifié pour afficher la sortie souhaitée – user101089