Ich suche das Gegenteil von get()
.
Bei einem gegebenen Objektnamen möchte ich, dass die Zeichenfolge, die dieses Objekt darstellt, direkt aus dem Objekt extrahiert wird.
Triviales Beispiel foo
dafür, der Platzhalter für die Funktion zu sein, die ich suche.
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)
Würde drucken:
"z"
Meine Arbeit, die in meinem aktuellen Problem schwieriger umzusetzen ist, ist:
test <- function(a="z"){
mean.x <- mean(get(a)$x)
print(a)
return(mean.x)}
test("z")
deparse(substitute(...))
ist was Sieget
in R ist,assign
aber ich bin nicht sicher, ob Sie wirklich danach suchen ...Antworten:
Der alte Trick des Ersatzes:
Edit: Lief es mit dem neuen Testobjekt
Hinweis: Dies ist in einer lokalen Funktion nicht erfolgreich, wenn eine Reihe von Listenelementen vom ersten Argument an übergeben wird
lapply
(und es schlägt auch fehl, wenn ein Objekt aus einer Liste übergeben wird, die an einefor
Schleife übergeben wurde). Sie können das extrahieren ".Names" -Attribut und die Reihenfolge der Verarbeitung aus der Struktur ergeben sich, wenn es sich um einen benannten Vektor handelt, der verarbeitet wird.quelle
Mein intuitives Verständnis, bei dem das Zitat die Variable oder den Ausdruck aus der Auswertung einfriert und die Deparse-Funktion, die die Umkehrung der Parse-Funktion ist, macht dieses eingefrorene Symbol zurück zu String
quelle
Beachten Sie, dass das Verhalten bei Druckmethoden unterschiedlich sein kann.
Andere Kommentare, die ich in Foren gesehen habe, deuten darauf hin, dass das letzte Verhalten unvermeidbar ist. Dies ist unglücklich, wenn Sie Druckmethoden für Pakete schreiben.
quelle
print.foo=function(x){ cat(deparse(substitute(x))) }
oderprint.foo=function(x){ print(deparse(substitute(x)), quote=FALSE) }
print.foo=function(x){ print.default(as.list(x)) }