Como a atravessar as fronteiras em R

Ao trabalhar com funções em R, às vezes, você trabalha com alguns objetos que você não criem em primeiro lugar na área de trabalho. Você usa 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 espaço de trabalho depois de usar a função. Então o que está acontecendo?

Criar 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 ( "Este é x:" x ", n") rm (x) gato ( "Este é x, depois de removê-lo:" x ", n")}

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 espaço de trabalho. Por quê?

Procurar 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 a partir da área de trabalho através de um script ou usando a linha de comando, este ambiente pai passa a ser o meio ambiente global.

Se R vê qualquer nome do objeto mencionado em nenhum código na função, ele primeiro procura 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 dessa 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