Lidar com a delimitação do âmbito R

Cada objeto que você criar no R termina neste ambiente, que é chamado de ambiente global.

O ambiente global é o universo do usuário R onde tudo acontece.

gurus R irá dizer-lhe que este # 147 universo # 148- realmente está contido em outro # 147-universo # 148- e que um em ainda uma outra, e assim por diante - mas que # 147-espaço exterior # 148- é um ambiente hostil adequado apenas para ousar codificadores sem medo de quebrar as coisas. Assim, não há necessidade de ir lá agora.

Você pode trabalhar com alguns objetos que você não criem em primeiro lugar no ambiente global. Você provavelmente usar os argumentos x, mult, e DIVERSÃO como se fossem objetos, e você criar um objeto por cento dentro da função que você não pode encontrar de volta no ambiente global depois de usar a função. Então o que está acontecendo?

Criando um caso de teste

Vamos descobrir através de um pequeno exemplo. Primeiro, crie um objeto x e um pequeno teste() funcionar como este:

x lt; - 1: 5test lt; - função (x) {cat (# 147-Este é x: # 148-, x, # 147- n # 148-) rm (x) gato (# 147-Este é x, depois de removê-lo: # 148-, x, 147- # n # 148-)}

o teste() função não fazer muito. Leva um argumento x, imprime-lo para o console, remove-la, e tenta imprimi-lo novamente. Você pode pensar que esta função irá falhar, porque x desaparece após a linha rm (x). Mas não, se você tentar esta função ele funciona muito bem, como mostrado no exemplo a seguir:

> Teste (5: 1) Este é x: 5 4 3 2 1 Esta é x, depois de removê-lo: 1 2 3 4 5

Mesmo após a remoção x, R ainda pode encontrar outra x que pode imprimir. Se você olhar um pouco mais de perto, você vê que o x impresso na segunda linha não é realmente o que você deu como um argumento, mas o x você criou antes no ambiente global. Por quê?

Pesquisando o caminho

Se você usar uma função, a função cria pela primeira vez um temporária ambiente local. Este ambiente local é aninhado dentro do ambiente global, o que significa que, a partir desse ambiente local, você também pode acessar qualquer objeto a partir do ambiente global. Assim que termina a função, o ambiente local é destruído em conjunto com todos os objectos nele.

Para ser completamente correto, a função sempre cria um ambiente dentro do ambiente que é chamado de, chamado de ambiente-mãe. Se você chamar uma função do ambiente global, quer através de um script ou usando a linha de comando, este ambiente pai passa a ser o meio ambiente global.

É possível ver uma ilustração esquemática de como a teste() função funciona abaixo. A grande retângulo representa o ambiente global, e o pequeno retângulo representa o ambiente local da função de teste. No ambiente global, você atribuir o valor 1: 5 para o objecto x. Na chamada de função, no entanto, você atribuir o valor 5: 1 ao argumento x. Este argumento torna-se um objeto x no ambiente local.

Como R olha através de ambientes globais e locais.
Como R olha através de ambientes globais e locais.

Se R vê qualquer nome do objeto - neste caso, x - mencionado em qualquer código na função, ele procura primeiro o meio ambiente local. Porque ele encontra um objeto x Há, que utiliza um para o primeiro gato() declaração. Na linha seguinte, R remove esse objeto x. Assim, quando R atinge a terceira linha, não pode encontrar um objeto x no ambiente local mais. Sem problemas.

R move para cima a pilha de ambientes e verificações para ver se encontra alguma coisa parecendo um x no ambiente global. Porque ele pode encontrar um x lá, ele usa esse um no segundo gato() declaração.

Se você usar rm () dentro de uma função, rm () irá, por padrão, exclua apenas os objetos dentro do ambiente local da função. Dessa forma, você pode evitar a falta de memória quando você escrever funções que têm de trabalhar em grandes conjuntos de dados. Você pode remover imediatamente grandes objetos temporários em vez de esperar para a função de fazê-lo no final.

menu