Comment envoyer sur une méthode dans r

Un outil utile pour traiter avec des fonctions de R a dépêché à une méthode. Une chose à retenir à propos des fonctions dans R est une fonction qui peut donner un résultat différent en fonction du type de valeur que vous donnez les arguments R dispose d'un système de génie, appelé le système de fonction générique,

Sommaire

qui vous permet d'appeler des fonctions différentes utilisant le même nom.

Pensez à des trames de données et des listes. Si vous imprimez une liste dans la console, vous obtenez la sortie disposés en rangées. D'autre part, une trame de données est imprimée sur la console disposés en colonnes. Donc le impression() fonction traite des listes et des trames de données différemment, mais les deux fois que vous avez utilisé la même fonction.

Trouver les méthodes derrière la fonction

Il est facile de savoir si vous avez utilisé la même fonction deux fois - juste coup d'oeil à l'intérieur du code de fonction impression() en tapant son nom sur la ligne de commande, comme ceci:

> Printfunction (x, ...) UseMethod ("print")

Vous pouvez ignorer les deux dernières lignes, car ils ne sont utilisés que par les développeurs de R. Mais jetez un oeil sur le corps de la fonction - il est une seule ligne!




Fonctions qui ne font pas beaucoup d'autre que de passer sur les objets pour la bonne fonction sont appelés fonctions génériques. Dans cet exemple, impression() est une fonction générique. Les fonctions qui font le travail réelle sont appelés méthodes.

Utiliser des méthodes avec UseMethod

Comment diable cela peut-il une ligne de code dans le impression() Fonction faire beaucoup de choses complexes comme vecteurs d'impression, des trames de données, et des listes tous d'une manière différente?

La réponse est contenue dans la UseMethod () fonction, ce qui est la fonction centrale dans le système de R. de fonction générique UseMethod () raconte R se déplacer le long et retrouver une fonction qui peut traiter le type d'objet qui est donné comme argument X.

R le fait en regardant à travers l'ensemble complet de fonctions à la recherche d'une autre fonction qui commence par impression suivi d'un point puis le nom du type d'objet.

Vous pouvez le faire vous-même en utilisant la commande à propos ('print .'). Entre les guillemets, vous pouvez mettre une expression régulière un peu comme dans le grep () fonction. Pour dire que le point R signifie vraiment un point, vous devez précéder de deux barres obliques inversées. Ne soyez pas surpris quand vous obtenez plus de 40 différents impression() fonctions pour toutes sortes d'objets.

Supposons que vous ayez une trame de données que vous voulez imprimer. R va chercher la fonction print.data.frame () et d'utiliser cette fonction pour imprimer l'objet que vous avez passé comme un argument. Vous pouvez également appeler cette fonction vous comme ceci:

> Small.one lt; - data.frame (a = 1: 2, b = 2: 1)> print.data.frame (small.one) un b1 1 22 2 1

L'effet de cette fonction diffère en rien de ce que vous obtiendriez si vous avez utilisé le générique print (small.one) fonctionner à la place. C'est parce que impression() donnera la small.one au print.data.frame () fonctionner à prendre soin d'elle.

Utiliser des méthodes par défaut

Dans le cas d'une liste, vous pouvez être tenté de chercher un print.list () fonction. Mais cela ne fonctionnera pas, parce que la print.list () ne existe pas fonction. Pourtant ce ne est pas un problème pour R - R ignore le type de l'objet dans cette affaire et il suffit de regarder pour une méthode par défaut, print.default ().

Pour de nombreuses fonctions génériques, il existe une méthode par défaut qui est utilisé si aucune méthode spécifique peut être trouvé. Si il ya un, vous pouvez reconnaître la méthode par défaut par le mot défaut après le point dans le nom de la fonction.

Donc, si vous souhaitez imprimer la trame de données sous forme de liste, utiliser la méthode par défaut comme ceci:

> Print.default (small.one) $ a [1] 1 2 $ b [1] 2 1attr (, «classe») [1] "data.frame"

» » » » Comment envoyer sur une méthode dans r