Lidar com escopo no r

Cada objeto que você criar em 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 “universo” é, na verdade contida em outro “universo” e que um em outro, e assim por diante -, mas que “espaço” é um ambiente hostil adequado apenas para se atrever 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?

Video: Individual tree detection in LiDAR data using Python, R and ArcGIS

Criando um caso de teste

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

X lt; - 1: 5test lt; - função (x) {gato ( “Este é x:”, X “n”) rm (x) gato ( “Este é x depois de removê-la:”, X “n”)}

o teste() função não fazer muito. Leva um argumento X, imprime-lo para o console, remove-lo, 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:

gt; teste (5: 1) Trata-se de x: 5 4 3 2 1 Esta é x após a sua remoção: 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ê verá 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ê?

Buscando o caminho

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

Video: COMO LIDAR COM CRÍTICAS NEGATIVAS E HATERS #031

Para ser completamente correto, a função sempre cria um ambiente dentro do ambiente é chamado de, chamado de ambiente pai. 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.

Você pode ver uma ilustração esquemática de como o 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 de objeto - neste caso, X - mencionado em nenhum código na função, ele primeiro procura o meio ambiente local. Porque ele encontra um objeto X lá, ele usa esse para o primeiro gato() declaração. Na linha seguinte, R remove esse objecto X. Assim, quando R alcança 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 que um no segundo gato() declaração.

Se você usar RM () dentro de uma função, RM () irá, por padrão, excluir apenas os objetos dentro do ambiente local 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.


Publicações relacionadas