Comment traverser un cadre de liste ou de données avec R applique fonctions

Lorsque vos données est sous la forme d'une liste, et que vous voulez effectuer des calculs sur chaque élément de cette liste dans R, le appropriée appliquer fonction est lapply (). Par exemple, pour obtenir la classe de chaque élément de iris, procédez comme suit:

> Lapply (iris, classe)

Comme vous le savez, lorsque vous utilisez sapply (), R cherche à simplifier les résultats dans une matrice ou d'un vecteur:

> Sapply (iris, classe) Sepal.Length Sepal.Width Petal.Length Petal.Width espèces "facteur" "numérique" "numérique" "numérique" "numérique"



Dites que vous voulez calculer la moyenne de chaque colonne de iris:

> Sapply (iris, signifie) Sepal.Length Sepal.Width Petal.Length Petal.Width Species5.843333 3,057333 3,758000 1,199333 un message de NAWarning: En mean.default (X [[5L]], ...): l'argument est non numérique ou logique: retour NA

Il ya un problème avec cette ligne de code. Il jette un message d'avertissement, car espèce est pas une colonne numérique. Ainsi, vous pouvez écrire une petite fonction à l'intérieur apply () qui teste si l'argument est numérique. Si elle est, puis de calculer la moyenne Score- contraire, il suffit de retourner N / A.

La AMUSANT argument de la apply () fonctions peuvent être une fonction quelconque, y compris vos propres fonctions personnalisées. En fait, vous pouvez aller plus loin. Il est effectivement possible de définir une fonction à l'intérieur la AMUSANT l'argument appel à toute apply () fonction:

> Sapply (iris, la fonction (x) ifelse (is.numeric (x), moyenne (x), NA)) Sepal.Length Sepal.Width Petal.Length Petal.Width Species5.843333 3,057333 3,758000 1,199333 NA

Qu'est-ce qu'il se passe ici? Vous avez défini une fonction qui prend un seul argument X. Si X est numérique, elle renvoie mean (x)- sinon, elle retourne N / A. Car sapply () traverse votre liste, chaque colonne, à son tour, est passé à votre fonction et évalués.

Lorsque vous définissez une fonction sans nom comme celui-ci dans une autre fonction, il est ce qu'on appelle un fonction anonyme. Les fonctions anonymes sont utiles lorsque vous souhaitez calculer quelque chose d'assez simple, mais vous ne voulez pas nécessairement pour stocker de façon permanente cette fonction dans votre espace de travail.


» » » » Comment traverser un cadre de liste ou de données avec R applique fonctions