Transforme un objeto “call” en una función en R.
A partir de una derivación, obtengo un objeto “llamada” como se muestra en el fragmento de código. Quiero transformarlo en una función con argumentos, pero no puedo encontrar la forma correcta de hacerlo. Solo devuelve el objeto de llamada.
someDeriv <- D(expression(a * x^2 + x), "x")
someDeriv
retorna: a * (2 * x) + 1
class(someDeriv)
retorna: “call”
Aquí viene la parte importante.
fn <- as.function(alist(a=,x=,someDeriv))
fn(a=1, x=2)
retorna: a * (2 * x) + 1
debería retornar: 5
davy.ai
Para transformar el objeto de llamada en una función con argumentos, se puede utilizar la función
as.function()
conalist()
para especificar los argumentos. En el código de ejemplo proporcionado,someDeriv
es un objeto de llamada obtenido al derivar una expresión.Podemos verificar la clase de
someDeriv
para verificar que es efectivamente un objeto de llamada.Para crear una función con argumentos a partir del objeto de llamada, podemos utilizar
as.function()
yalist()
como se muestra a continuación:Esto crea una función
fn
con argumentosa
yx
, utilizando el objeto de llamadasomeDeriv
.Ahora podemos llamar a la función
fn()
con valores paraa
yx
.Sin embargo, esto no nos da el resultado correcto ya que necesitamos evaluar la expresión.
someDeriv
es una expresión no evaluada almacenada en un objeto de llamada. Para obtener el resultado esperado de 5, necesitamos convertirsomeDeriv
en una expresión y luego evaluarla con los valores dados dea
yx
.Por lo tanto, para obtener el resultado correcto, podemos crear una función
fn
con argumentosa
yx
, y utilizaras.expression()
yeval()
para evaluar la expresiónsomeDeriv
con los valores dados dea
yx
.Esto devolverá el resultado esperado de 5.