labs ggtitle ggplot r scoping

ggtitle - adjuntar() dentro de la función



plotly title r (3)

La forma más fácil de resolver problemas de alcance como este es, por lo general, probar algo simple:

a = 1 params = c() params$a = 2 myfun <- function(params) { attach(params) print(a) detach(params) } myfun(params)

Los siguientes objetos están enmascarados _by_ .GlobalEnv :

a

# [1] 1

Como puede ver, R está recogiendo el atributo global a aquí.

Casi siempre es una buena idea evitar el uso de attach y detach siempre que sea posible, el alcance termina siendo difícil de manejar (por cierto, también es mejor evitar nombrar las variables c - R a menudo se dará cuenta de a qué se refiere, pero hay tantas otras cartas por ahí, ¿por qué arriesgarse?). Además, me parece casi imposible descifrar el código de adjuntar / separar.

Me gustaría dar un argumento params a una función y luego adjuntarlo para que pueda usar a en lugar de params $ a cada vez que me refiero al elemento de lista a.

run.simulation<-function(model,params){ attach(params) # # Use elements of params as parameters in a simulation detach(params) }

¿Hay algún problema con esto? Si he definido una variable global llamada c y también he definido un elemento llamado c de la lista "params", ¿qué valor se usaría después del comando attach?


Noah ya ha señalado que usar la función de adjuntar es una mala idea, aunque lo veas en algunos ejemplos y libros. Hay un camino alrededor. Puede utilizar "adjunto local" que se llama with . En el ejemplo ficticio de Noah, esto se vería como

with(params, print(a))

Lo que dará resultado idéntico, pero es más ordenado.


Otra posibilidad es:

run.simulation <- function(model, params){ # Assume params is a list of parameters from # "params <- list(name1=value1, name2=value2, etc.)" for (v in 1:length(params)) assign(names(params)[v], params[[v]]) # Use elements of params as parameters in a simulation }