Quiero escribir una función. Sin embargo, la suposición es que no conozco los argumentos de entrada de la función. Solo tengo un vector de caracteres para definir los argumentos de entrada de la función. Considere el siguiente código:

f <- expression(exp(-d^2/s^2) )
fx <- function(d, s){ eval( f[[1]] ) }

En el código anterior, conozco los parámetros de expression y defino fácilmente una función de cálculo para él. Pero obtengo la expresión del usuario y no sé cuáles son los parámetros. Entonces, quiero algo como esto:

f <- expression(exp(-d^2/s^2) )
v = all.vars(f)
#"d" "s"
fx <- function(?){ eval( f[[1]] ) }

Quiero convertir v a d y s en la función de entrada en lugar de ?. ¿Hay alguna manera?

1
mohammad 23 oct. 2019 a las 01:21

1 respuesta

La mejor respuesta

Hay algunas formas de construir funciones mediante programación, una de las cuales es:

body <- quote(exp(-d^2/s^2))
arg_names <- all.vars(body)
args <- setNames(rep(NA,length(arg_names)),all.vars(body))
fx <- as.function(c(args,body))

>   fx(1,1)
[1] 0.3678794
3
joran 22 oct. 2019 a las 22:35