Gracias de antemano, y lo siento si esta pregunta ha sido respondida anteriormente. He buscado bastante extensamente. Tengo un conjunto de datos que contiene una fila de información concatenada, específicamente: nombre, código de color, alguna expresión de función. Por ejemplo, un valor puede ser:Crear una lista de funciones a partir de un vector de caracteres
costo # FF0033 @ log (x) +6.
Tengo todo el código para extraer la información, y termino con un vector de expresiones que me gustaría convertir a una lista de funciones reales.
Por ejemplo:
func.list <- list()
test.func <- c("x","x+1","x+2","x+3","x+4")
donde test.func es el vector de expresiones. Lo que me gustaría es:
func.list[[3]]
que es equivalente a
function(x){x+3}
Sé que puedo crear una función usando:
somefunc <- function(x){eval(parse(text="x+1"))}
para convertir un valor de carácter en una función. El problema surge cuando intento hacer un loop para realizar múltiples funciones. Para un ejemplo de algo que he intentado no ha funcionado:
for(i in 1:length(test.func)){
temp <- test.func[i]
f <- assign(function(x){eval(expr=parse(text=temp))})
func.list[[i]] <- f
}
Basado en otro post (http://stats.stackexchange.com/questions/3836/how-to-create-a-vector-of -Funciones) también probé esto:
makefunc <- function(y){y;function(x){y}}
for(i in 1:length(test.func)){
func.list[[i]] <- assign(x=paste("f",i,sep=""),value=makefunc(eval(parse(text=test.func[i]))))
}
que da el siguiente error: error en eval (expr, envir, enclos): objeto de 'x' que no se encuentra
el objetivo final es tomar la lista de funciones y aplique la función jth a la j-ésima columna de data.frame, para que el usuario del script pueda especificar cómo normalizar cada columna umn dentro de la información concatenada dada por el encabezado de columna.
Gracias !! Funcionó perfectamente. Agregaré el código que utilicé para completar la tarea como una respuesta adicional para otros usuarios una vez que SO me permita hacerlo. (y disculpe por todos los comentarios/ediciones/eliminaciones/y lo que sea - obviamente soy nuevo en SO) – dayne
@dayne Yo diría que ha tomado las cosas muy bien, en comparación con el visitante SO medio nuevo. – joran