Je cherche l'inverse de get()
.
Étant donné un nom d'objet, je souhaite que la chaîne de caractères représentant cet objet soit extraite directement de l'objet.
Exemple trivial avec le fait d' foo
être l'espace réservé pour la fonction que je recherche.
z <- data.frame(x=1:10, y=1:10)
test <- function(a){
mean.x <- mean(a$x)
print(foo(a))
return(mean.x)}
test(z)
Serait imprimer:
"z"
Mon travail, qui est plus difficile à implémenter dans mon problème actuel, est:
test <- function(a="z"){
mean.x <- mean(get(a)$x)
print(a)
return(mean.x)}
test("z")
deparse(substitute(...))
c'est ce que vous recherchezget
dans R est,assign
mais je ne suis pas sûr que ce soit ce que vous recherchez vraiment ...Réponses:
Le vieux truc de deparse-substitut:
Edit: Ran it avec le nouvel objet de test
Remarque: cela ne réussira pas dans une fonction locale lorsqu'un ensemble d'éléments de liste est passé du premier argument à
lapply
(et cela échoue également lorsqu'un objet est passé d'une liste donnée à unefor
boucle.) Vous pourrez extraire le ".Names" -attribut et l'ordre de traitement à partir du résultat de la structure, s'il s'agissait d'un vecteur nommé en cours de traitement.la source
Ma compréhension intuitive dans laquelle la citation gèle la var ou l'expression de l'évaluation et la fonction deparse qui est l'inverse de la fonction d'analyse rend ce symbole figé à String
la source
Notez que pour les méthodes d'impression, le comportement peut être différent.
D'autres commentaires que j'ai vus sur les forums suggèrent que le dernier comportement est inévitable. Ceci est malheureux si vous écrivez des méthodes d'impression pour les packages.
la source
print.foo=function(x){ cat(deparse(substitute(x))) }
ouprint.foo=function(x){ print(deparse(substitute(x)), quote=FALSE) }
print.foo=function(x){ print.default(as.list(x)) }