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 forma 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 de 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 seus méritos. Às vezes você precisa 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 - significativo (controlo) 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. Exatamente como no caso de outros objetos, essa função é criada no ambiente local de calculate.eff () e destruiu novamente 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:



gt; metade lt; - c (2,23, 3,23, 1,48) gt; cheio lt; - c (4,85, 4,95, 4,12) gt; nada lt; - c (0,14, 0,18, 0,56, 0,23) gt; calculate.eff (meio, 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 ambiente local que contém os objetos 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 ambiente local dentro do um dos calculate.eff () contendo apenas um objecto z com o valor de X.

  3. min.base () olha para o objeto ao controle no ambiente de calculate.eff () e subtrai a média deste vector a partir 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 de y.

  5. Ambos os resultados são divididos por outro, eo resultado é passada para o meio 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 local criado por addPercent () não é incorporado no um de calculate.eff () mas no ambiente global, onde addPercent () é definido.


Publicações relacionadas