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
}