Hacer frente a la determinación del alcance de r

Cada objeto se crea en I termina en este entorno, que se llama la medioambiente global.

El medio ambiente global es el universo del usuario R donde todo sucede.

Gurús de I le dirá que esta " universo " en realidad está contenida en otra " universo " y que uno en otro, y así sucesivamente - pero eso " el espacio exterior " es un ambiente hostil adecuado sólo para codificadores atrevidos sin temor a romper cosas. Por lo tanto, no hay necesidad de ir allí ahora.

Usted puede trabajar con algunos de los objetos que usted no cree en primer lugar en el entorno global. Es probable que utilice los argumentos X, mult, y DIVERTIDO como si fueran objetos, y se crea un objeto por ciento dentro de la función que no se puede encontrar de nuevo en el medio ambiente mundial después de utilizar la función. Entonces, ¿qué está pasando?

Creación de un caso de prueba

Vamos a ver a través de un pequeño ejemplo. En primer lugar, crear un objeto X y una pequeña test () funcionar como esto:

X lt; - 1: 5test lt; - la función (x) {cat (" Este es x: # 148 ;, x, " n ") rm (x) gato (" Este es x después de sacarlo: # 148 ;, x, " n ")}

los test () la función no hace mucho. Se necesita un argumento X, se imprime en la consola, lo elimina, y trata de imprimir de nuevo. Usted puede pensar que esta función se producirá un error, ya que X desaparece después de la línea rm (x). Pero no, si intenta esta función funciona bien, como se muestra en el siguiente ejemplo:

> Prueba (5: 1) Esta es x: 5 4 3 2 1 Este es x después de sacarlo: 1 2 3 4 5

Incluso después de la eliminación X, R puede todavía encontrar otro X que se puede imprimir. Si nos fijamos un poco más de cerca, se ve que la X impreso en la segunda línea no es en realidad el que usted dio como argumento, pero el X que creó antes en el entorno global. ¿Porqué?

Buscando el camino

Si utiliza una función, la función crea primero un temporal ambiente local. Este entorno local es anidado dentro del entorno global, lo que significa que, a partir de ese entorno local, también se puede acceder a cualquier objeto desde el medio ambiente mundial. Tan pronto como termina la función, el entorno local es destruida junto con todos los objetos en él.

Para ser completamente correcto, en función siempre crea un ambiente en el entorno que se llama a partir, llamó a la entorno de los padres. Si se llama a una función desde el medio ambiente mundial, ya sea a través de una secuencia de comandos o mediante el uso de la línea de comandos, este entorno de los padres pasa a ser el medio ambiente mundial.

Usted puede ver una ilustración esquemática de cómo el test () función trabaja continuación. El gran rectángulo representa el medio ambiente mundial, y el pequeño rectángulo representa el entorno local de la función de prueba. En el entorno global, se asigna el valor 15 al objeto X. En la llamada de función, sin embargo, se asigna el valor 5: 1 al argumento X. Este argumento se convierte en un objeto X en el entorno local.

¿Cómo R mira a través de entornos globales y locales.
¿Cómo R mira a través de entornos globales y locales.

Si R ve ningún nombre de objeto - en este caso, X - mencionado en cualquier código en la función, busca primero el medio ambiente local. Debido a que encuentre un objeto X allí, se utiliza para la que uno primero gato() comunicado. En la siguiente línea, R elimina ese objeto X. Así que, cuando R alcanza la tercera línea, no puede encontrar un objeto X en el entorno local más. No hay problema.

R se mueve hacia arriba de la pila de ambientes y comprobaciones para ver si encuentra algo que parece un X en el medio ambiente mundial. Debido a que puede encontrar un X allí, se utiliza ese uno en el segundo gato() comunicado.

Si utiliza rm () dentro de una función, rm () será, por defecto, eliminar sólo los objetos en el entorno local de esa función. De esta manera, usted puede evitar quedarse sin memoria al escribir funciones que tienen que trabajar en grandes conjuntos de datos. Puede retirar inmediatamente grandes objetos temporales en lugar de esperar a que la función de hacerlo al final.




» » » » Hacer frente a la determinación del alcance de r