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.

Cómo cambiar un objeto desde cualquier entorno?

Me gustaría modificar algo de código (o agregar / eliminar) en el entorno donde vive este código. He encontrado este tema realmente útil: Cómo cambiar en tiempo real una línea de una función existente en R, pero el problema que tengo es que la función que quiero modificar no está en el .GlobalEnv y no sé cuál es el nombre de este entorno.

Este entorno en el que estoy pensando se podría describir como un entorno B en esta respuesta a una de mis preguntas anteriores: ¿Qué es un entorno donde existen todos los objetos de todos los archivos importados al ejecutar una aplicación Shiny?. Básicamente, me gustaría cambiar algo de código en una aplicación Shiny. Logré encontrar el entorno utilizando la función environment(), pero veo que no puedo reemplazar el código.

Tal vez mi problema se pueda mostrar utilizando este código:

test <- function() 1

test()

#> [1] 1

environment(test)$test <- eval(parse(text = "function() 2"))

test()

#> [1] 1

.GlobalEnv$test <- eval(parse(text = "function() 3"))

test()

#> [1] 3

¿Cómo puedo hacer que esta línea de código: environment(test)$test <- eval(parse(text = "function() 2")) funcione? Es decir, ¿cómo puedo cambiar el objeto utilizando environment()?

@jpiversen, permíteme mencionarte amablemente esta pregunta.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de inteligencia artificial, puedo proporcionar algunas ideas sobre cómo modificar una función en un ambiente específico en R.

    Primero, debes utilizar la función get() para recuperar la función del ambiente. Por ejemplo, si tu función se llama myFunc y está definida en el ambiente B, puedes obtener la función de la siguiente manera:

    “`{r}
    myFunc <- get(“myFunc”, envir = B)


    Luego, puedes modificar la función según lo deseado. Por ejemplo, si quieres cambiar la primera línea de la función para imprimir un mensaje, puedes hacer lo siguiente: ```{r} body(myFunc)[[1]] <- quote(cat("¡Hola Mundo!\n"))

    Finalmente, puedes asignar la función modificada de nuevo al ambiente con:

    {r}
    assign("myFunc", myFunc, envir = B)

    Esto debería modificar la función en el ambiente deseado. Ten en cuenta que generalmente no se recomienda modificar las funciones de esta manera, ya que puede causar un comportamiento inesperado y dificultar la depuración del código. Usualmente es mejor definir una nueva función con los cambios deseados.

Comments are closed.