varias superponer studio modificar lineas graficos graficas funcion ejes r function editing

superponer - ¿De qué maneras hay para editar una función en R?



superponer graficas en r (5)

Digamos que tenemos la siguiente función:

foo <- function(x) { line1 <- x line2 <- 0 line3 <- line1 + line2 return(line3) }

Y que queremos cambiar la segunda línea para que sea:

line2 <- 2

¿Cómo lo harías tú?

Una forma es usar

fix(foo)

Y cambia la función.

Otra forma es simplemente escribir la función nuevamente.

¿Hay otra manera? (Recuerde, la tarea era cambiar solo la segunda línea)

Lo que me gustaría es, de alguna manera, representar la función como un vector de cadenas (bueno, personajes), luego cambiar uno de sus valores y luego convertirlo en una función nuevamente.


O echa un vistazo a la función de depuración trace() . Probablemente no sea exactamente lo que está buscando, pero le permite jugar con los cambios y tiene la característica agradable de que siempre puede volver a su función original con untrace() . trace() es parte del paquete base y viene con una página de ayuda completa y completa.

Comience por llamar a as.list (body(foo)) para ver todas las líneas de su código.

as.list(body(foo)) [[1]] `{` [[2]] line1 <- x [[3]] line2 <- 0 [[4]] line3 <- line1 + line2 [[5]] return(line3)

Luego, simplemente define qué agregar a su función y dónde colocarla definiendo los argumentos en trace() .

trace (foo, quote(line2 <- 2), at=4) foo (2) [1] 4

Dije al principio que la trace() podría no ser exactamente lo que está buscando ya que realmente no cambió su tercera línea de código y en su lugar simplemente reasignó el valor a la line2 en la siguiente línea de código insertada. Se vuelve más claro si imprime el código de su función ahora rastreado

body (foo) { line1 <- x line2 <- 0 { .doTrace(line2 <- 2, "step 4") line3 <- line1 + line2 } return(line3) }


Puede usar la función '' cuerpo ''. Esta función devolverá el cuerpo de la función:

fnx = function(a, b) { return(a^2 + 7*a + 9)} body(fnx) # returns the body of the function

Entonces, una buena forma de ''editar'' una función es usar ''cuerpo'' en el lado izquierdo de una declaración de asignación:

body(fnx) = expression({a^2 + 11*a + 4})


fix es la mejor forma que conozco de hacer esto, aunque también puede usar edit y volver a asignarlo:

foo <- edit(foo)

Esto es lo que hace la fix internamente. Es posible que desee hacer esto si desea volver a asignar sus cambios a un nombre diferente.


fixInNamespace es como fix para las funciones de un paquete (incluidas las que no se han exportado).


> body(foo)[[3]] <- substitute(line2 <- 2) > foo function (x) { line1 <- x line2 <- 2 line3 <- line1 + line2 return(line3) }

(El "{" es cuerpo (foo) [[1]] y cada línea es un elemento sucesivo de la lista.)