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)
}