Estoy buscando el reverso de get()
.
Dado un nombre de objeto, deseo que la cadena de caracteres que representa ese objeto se extraiga directamente del objeto.
Ejemplo trivial de foo
ser el marcador de posición para la función que estoy buscando.
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)
Imprimiría:
"z"
Mi trabajo, que es más difícil de implementar en mi problema actual es:
test <- function(a="z"){
mean.x <- mean(get(a)$x)
print(a)
return(mean.x)}
test("z")
deparse(substitute(...))
es lo que buscasget
en R esassign
pero no estoy seguro de que eso es lo que realmente estás buscando ...Respuestas:
El viejo truco de sustitución de sustitución:
Editar: lo ejecutó con el nuevo objeto de prueba
Nota: esto no tendrá éxito dentro de una función local cuando se pasa un conjunto de elementos de la lista desde el primer argumento a
lapply
(y también falla cuando se pasa un objeto de una lista dada a unfor
bucle -loop). Podría extraer el El atributo ".Names" y el orden de procesamiento del resultado de la estructura, si se tratara de un vector con nombre.fuente
Mi comprensión intuitiva en la que la cita congela la var o expresión de la evaluación y la función de eliminación que es la inversa de la función de análisis hace que ese símbolo congelado vuelva a String
fuente
Tenga en cuenta que para los métodos de impresión, el comportamiento puede ser diferente.
Otros comentarios que he visto en foros sugieren que el último comportamiento es inevitable. Esto es lamentable si está escribiendo métodos de impresión para paquetes.
fuente
print.foo=function(x){ cat(deparse(substitute(x))) }
oprint.foo=function(x){ print(deparse(substitute(x)), quote=FALSE) }
print.foo=function(x){ print.default(as.list(x)) }