studio - r plotly axis format
Vinculando variables externas en R (1)
Supongamos que tengo la siguiente función:
g = function(x) x+h
Ahora, si tengo en mi entorno un objeto llamado h , no tendría ningún problema:
h = 4
g(2)
## should be 6
Ahora, tengo otra función:
f = function() {
h = 3
g(2)
}
Yo esperaría:
rm(h)
f()
## should be 5, isn''t it?
En cambio, recibo un error
## Error in g(2) : object ''h'' not found
Esperaría que g se evaluara dentro del entorno de f , de modo que h en f estará ligado a la h en g, como lo fue cuando .GlobalEnv g dentro de .GlobalEnv . Esto no sucede (obviamente). cualquier explicación por qué? ¿Cómo superar esto para que la función dentro de la función (por ejemplo, g ) se evalúe utilizando el entorno adjunto?
Hay una diferencia entre el entorno de una función y su marco de evaluación (principal).
El entorno circundante se establece cuando la función está definida. Si define su función g en el prompt R:
g = function(x) x+h
entonces el entorno circundante de g será el entorno global. Ahora si llamas g desde otra función:
f = function() {
h = 3
g(2)
}
el marco de evaluación principal es el entorno de f . Pero esto no cambia el entorno circundante de g , que es un atributo fijo que no depende de dónde se evalúa. Es por eso que no recogerá el valor de h que se define dentro de f .
Si quiere que g use el valor de h definido dentro de f , entonces también debe definir g dentro de f :
f = function() {
h = 3
g = function(x) x+h
g(2)
}
Ahora el entorno circundante de g será el entorno de f (pero tenga en cuenta que este g no es el mismo que g que creó anteriormente en el prompt R).
Alternativamente, puede modificar el entorno adjunto de g siguiente manera:
f = function() {
h = 3
environment(g) <- environment()
g(2)
}