jueves, 9 de julio de 2015

Manipulación de los nombres de las funciones 1

[Lenguajes: R]

Problema

En R las funciones se guardan en variables, por ejemplo, una función que simplemente imprima su argumento podría darse por
miFun <- function(x) {print(x)}
# La ejecutamos así
miFun("cualquier cosa")
## [1] "cualquier cosa"
Puede ocurrir, sin embargo, que el nombre de la función esté contenida, como un string de caracteres, en otra variable:
nombreF <- "miFun"
Supongamos que no se tiene acceso a la variable miFun, sino únicamente a la variable nombreF. ¿De qué manera se podría ejecutar la función a partir de eso? Esto es, tener algo como:
EJECUTA(nombreF)("algún argumento")
## [1] "algún argumento"

Solución

Para resolver este problema, recurriremos a dos funciones primitivas del lenguaje, assign() y get(), que permiten asignar variables, y extraer valores de variables a partir de sus nombres dados como strings de caracteres:
# La asignación 
x <- 3
# Es lo mismo que:
assign("x", 3)
# La extracción de un valor:
x
## [1] 3
# Es lo mismo que
get("x")
## [1] 3
Por otra parte, la sintaxis de este lenguaje permite ejecutar una función a partir de la variable que ha servido para definirla, o a partir del nombre de la variable dada como un string de caracteres constante. Así,
miFun("cualquier cosa")
## [1] "cualquier cosa"
tiene el mismo resultado que:
"miFun"("cualquier cosa") # NOTE las comillas en el nombre de la función
## [1] "cualquier cosa"
Combinando todo esto, llegamos al resultado deseado de ejecutar la función a partir de una variable que contiene su nombre (nombreF), de la siguiente manera:
get(nombreF)("cualquier cosa") 
## [1] "cualquier cosa"

Si quieres ver este mismo post en mis publicaciones de Rpubs:

No hay comentarios.:

Publicar un comentario