Comment utiliser les fonctions internes à r

À certains moments, il peut être très utile d'utiliser les fonctions internes dans R. Ecrire vos fonctions de manière à ce qu'ils ont besoin des objets dans l'environnement mondial n'a pas vraiment de sens, parce que vous utilisez des fonctions pour éviter la dépendance sur les objets dans l'environnement mondial en premier lieu.

En fait, tout le concept derrière R oppose fermement en utilisant des variables globales utilisées dans différentes fonctions. Comme un langage de programmation fonctionnel, l'une des principales idées de R est que le résultat d'une fonction ne devrait pas dépendre de quoi que ce soit, mais les valeurs pour les arguments de cette fonction. Si vous donnez les arguments les mêmes valeurs, vous obtenez toujours le même résultat.

Si vous venez d'autres langages de programmation comme Java, cette caractéristique peut vous paraître étrange, mais il a ses mérites. Parfois vous avez besoin de répéter quelques calculs à quelques reprises dans une fonction, mais ces calculs ne prennent sens à l'intérieur de cette fonction.

Supposons que vous voulez comparer la production de lumière de certaines lampes à mi-puissance et de la pleine puissance. Les serviettes vous avez ajoutés dans devant la fenêtre pour bloquer le soleil hors ne sont pas vraiment à la hauteur, de sorte que vous aussi mesurer la quantité de lumière est encore à venir à travers. Vous souhaitez soustraire la moyenne de cette valeur à partir des résultats afin de corriger vos mesures.

Pour calculer le rendement à 50 pour cent de puissance, vous pouvez utiliser la fonction suivante:




calculate.eff lt; - la fonction (x, y, commande) {min.base lt; - fonction (z) z - moyenne (de contrôle) min.base (x) / min.base (y)}

À l'intérieur de calculate.eff () fonction, vous voyez une autre définition de fonction pour une min.base () fonction. Exactement comme dans le cas d'autres objets, cette fonction est créée dans l'environnement local de calculate.eff () et détruit à nouveau lorsque la fonction est effectuée. Vous ne trouverez pas min.base () Retour dans l'espace de travail.

Vous pouvez utiliser la fonction comme suit:

> Demi- lt; - c (2.23, 3.23, 1.48)> intégral lt; - c (4,85, 4,95, 4,12)> rien lt; - c (0,14, 0,18, 0,56, 0,23)> calculate.eff (demi, complètement, rien) [1] 0,4270093 0,6318887 0,3129473

Si vous regardez un peu plus près à la définition de la fonction de min.base (), vous remarquez qu'il utilise un objet contrôle mais ne dispose pas d'une dispute avec ce nom. Comment cela fonctionne alors? Lorsque vous appelez la fonction, il arrive ceci:

  1. La fonction calculate.eff () crée un nouvel environnement local qui contient les objets X (avec la valeur de cinquante), y (avec la valeur de cent), contrôle (avec la valeur de rien), Ainsi que la fonction min.base ().

  2. La fonction min.base () crée un nouvel environnement local dans l'un des calculate.eff () contenant un seul objet z avec la valeur de X.

  3. min.base () semble pour l'objet contrôle dans l'environnement de calculate.eff () et soustrait de la moyenne de ce vecteur à partir de chaque numéro de z. Cette valeur est alors retourné.

  4. La même chose se produit à nouveau, mais cette fois- z Obtient la valeur de y.

  5. Les deux résultats sont divisés par un autre, et le résultat est transmis à l'environnement mondial nouveau.

L'environnement local est intégré dans l'environnement où la fonction est définie, pas où il est appelé. Supposons que vous utilisiez addPercent () à l'intérieur calculate.eff () mettre en forme les nombres. L'environnement local créé par addPercent () est pas intégrée dans celle de calculate.eff () mais dans l'environnement mondial, où addPercent () est défini.


» » » » Comment utiliser les fonctions internes à r