Como usar as funções internas em R

Às vezes, pode ser muito útil para usar as funções internas no R. Escrevendo suas funções de tal modo que eles precisam de objetos no ambiente global realmente não faz sentido, porque você usa funções para evitar a dependência de objetos no ambiente global em primeiro lugar.

Na verdade, todo o conceito por trás R opõe fortemente o uso de variáveis ​​globais utilizadas em diferentes funções. Como uma linguagem de programação funcional, uma das principais ideias de R é que o resultado de uma função não deve ser dependente de qualquer coisa, mas os valores para os argumentos de que a função. Se você der os argumentos dos mesmos valores, você sempre obter o mesmo resultado.

Se você vem de outras linguagens de programação como Java, essa característica pode parecer-lhe estranho, mas tem os seus méritos. Às vezes você precisará repetir alguns cálculos algumas vezes dentro de uma função, mas esses cálculos só fazem sentido dentro dessa função.

Suponha que você queira comparar a produção de luz de algumas lâmpadas na metade do poder e potência máxima. As toalhas que você colocar na frente da janela para bloquear o sol fora não são realmente até o trabalho, para que também medem a quantidade de luz ainda está chegando ao fim. Você quer subtrair a média desse valor a partir dos resultados, a fim de corrigir suas medidas.

Para calcular a eficiência em 50 por cento de energia, você pode usar a seguinte função:

calculate.eff lt; - função (x, y, controle) {min.base lt; - função (z) z - média (controle) min.base (x) / min.base (y)}

Dentro de calculate.eff () função, você vê uma outra definição de função para um min.base () função. Exactamente como no caso de outros objectos, esta função é criada no ambiente local da calculate.eff () e destruída de novo quando a função é feito. Você não vai encontrar min.base () volta no espaço de trabalho.

Você pode usar a função como segue:

> meia lt; - c (2,23, 3,23, 1,48)> cheia lt; - c (4,85, 4,95, 4,12)> nada lt; - c (0,14, 0,18, 0,56, 0,23)> calculate.eff (meia, cheio, nada) [1] 0,4270093 0,6318887 0,3129473

Se você olhar um pouco mais de perto a definição da função de min.base (), você notar que ele usa um objeto ao controle mas não tem um argumento com esse nome. Como isso funciona, então? Quando você chamar a função, acontece o seguinte:

  1. A função calculate.eff () cria um novo meio ambiente local que contém os objectos x (Com o valor de cinquenta), y (Com o valor de cem), ao controle (Com o valor de nada), Bem como a função min.base ().

  2. A função min.base () cria um novo meio ambiente local no interior do um de calculate.eff () contendo apenas um objeto z com o valor de x.

  3. min.base () olha para o objecto ao controle no ambiente de calculate.eff () e subtrai o valor médio dessa vetor de cada número de z. Este valor é então devolvido.

  4. A mesma coisa acontece de novo, mas desta vez z obtém o valor y.

  5. Ambos os resultados estão divididos por um outro, e o resultado é passada para o ambiente global novamente.

O ambiente local é incorporado no ambiente onde a função é definida, não onde ele é chamado. Suponha que você use addPercent () dentro calculate.eff () para formatar os números. O ambiente criado por locais addPercent () não é incorporado no de calculate.eff () mas no ambiente global, onde addPercent () é definido.

menu