Cómo cruzar las fronteras en r

Mientras trabajaba con funciones en I, a veces, se trabaja con algunos de los objetos que usted no cree en primera área de trabajo. Utiliza 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 espacio de trabajo después de utilizar la función. Entonces, ¿qué está pasando?

Crear 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 ("Esto es x:", x, " n") rm (x) cat ("Este es x después de sacarlo", 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 espacio de trabajo. ¿Porqué?

Buscar en 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 área de trabajo a través de una secuencia de comandos o mediante la línea de comandos, este entorno de los padres pasa a ser el medio ambiente mundial.

Si R ve ningún nombre de objeto se menciona en ningún 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 dentro 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.




» » » » Cómo cruzar las fronteras en r