Hur till Traverse en lista eller Data Ram med R Apply Funktioner

February 23

När dina data är i form av en lista, och du vill utföra beräkningar på varje element i den listan i R, är det lämpligt tillämpa funktionen lapply (). Till exempel, för att få den klass av varje element i iris, gör följande:

> Lapply (iris, klass)

Som ni vet, när du använder sapply (), R försöker förenkla resultaten till en matris eller vektor:

> Sapply (iris, klass)
Sepal.Length Sepal.Width Petal.Length Petal.Width Arter
"Numerisk" "numerisk" "numerisk" "numerisk" "faktor"

Säg att du vill beräkna medelvärdet för varje kolumn av iris:

> Sapply (iris, menar)
Sepal.Length Sepal.Width Petal.Length Petal.Width Arter
5.843333 3.057333 3.758000 1.199333 NA
Varning meddelande:
I mean.default (X [[5L]], ...):
argument inte är numeriskt eller logisk: vänder NA

Det finns ett problem med denna kodrad. Det kastar ett varningsmeddelande eftersom arten inte är en numerisk kolumn. Så, kanske du vill skriva en liten funktion inuti gäller () att test huruvida argumentet är numeriskt. Om det är, sedan beräkna medelvärdet; annars bara tillbaka NA.

FUN Argumentet av tillämpliga () funktioner kan vara vilken funktion, inklusive dina egna anpassade funktioner. I själva verket kan du gå ett steg längre. Itâ € s faktiskt möjligt att definiera en funktion inne i FUN argumentet samtal till något gäller () funktion:

> Sapply (iris, funktion (x) ifelse (is.numeric (x), menar (x), NA))
Sepal.Length Sepal.Width Petal.Length Petal.Width Arter
5.843333 3.057333 3.758000 1.199333 NA

Whatâ € s händer här? Du definierat en funktion som tar ett enda argument x. Om x är numeriskt returneras medelvärde (x); annars returneras NA. Eftersom sapply () korsar din lista, varje kolumn i sin tur skickas till din funktion och utvärderas.

När du definierar en namnlös funktion som denna inuti en annan funktion, € itâ s kallas en anonym funktion. Anonyma funktioner är användbara när du vill beräkna något ganska enkelt, men du donâ € t nödvändigtvis permanent vill spara den funktionen i din arbetsyta .