es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Datos no reconocidos dentro de la función en R.

Me pregunto por qué mi data123 no es reconocido dentro del llamado a allEffects(fit2, ...) a continuación. ¿Existe alguna solución para esto?

Mi máquina utiliza “R versión 4.0.0 (2020-04-24)” en Windows 10.

Error object 'data123' not found

library(effects)

m1 <- lm(mpg ~ hp + cyl, data = mtcars)

foo <- function(fit,...) {

data123 <- eval(fit$call$data)

fit2 <- lm(fit$call$formula, data = data123)

allEffects(fit2, ...)   #### 'data123' no es reconocido AQUÍ
}   

<h1>----------EJEMPLO DE USO:</h1>

foo(m1)

<h1>Error durante wrapup: object 'data123' not found</h1>

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con el código anterior es que el objeto data123 está definido dentro del cuerpo de la función foo, y no es reconocido fuera de ella debido a las reglas de alcance de variables en R.

    Para solucionarlo, una forma es definir data123 fuera de la función foo, antes de su llamado. Luego, pasar data123 como argumento a la función foo.

    Aquí hay un ejemplo de cómo se podría modificar el código:

    library(effects)
    
    # define data123 outside of foo function
    data123 <- eval(m1$call$data)
    
    foo <- function(fit, data, ...) { # pasar data como argumento
    
       fit2 <- lm(fit$call$formula, data = data) 
       allEffects(fit2, ...)   # data123 es reconocido aquí  
    }   
    
    # llamada a foo con m1 y data123
    foo(m1, data = data123)
    

    Tenga en cuenta que eliminamos el eval innecesario y lo reemplazamos con m1$call$data. Además, eliminamos la asignación de data123 dentro de foo y lo pasamos como argumento. Finalmente, eliminamos el argumento no utilizado ... en la función foo.

Comments are closed.