Balíčky Tidyverse jako ggplot2 a dplyr mají syntaxi funkcí, která je obvykle velmi užitečná: Nemusíte dávat názvy sloupců do uvozovek. Například:
dplyr :: filter (mtcars, mpg> 30)
Poznámka: název sloupce, mpg, je bez uvozovek.
Tato funkce však nebyla užitečná, pokud chcete psát své vlastní funkce R pomocí tidyverse. Je to proto, že základní funkce R obvykle potřebují uvozené názvy sloupců, zatímco funkce tidyverse obecně ne.
Ale tento problém má nyní jednoduché řešení, a to díky nejnovější verzi balíčku rlang. A že znamená, že je velmi snadné vytvořit si vlastní funkce ggplot pro své oblíbené přizpůsobené grafy.
Dovolte mi projít příkladem s využitím údajů od Zillow s odhadovanými středními domácími hodnotami. V níže uvedeném kódu načtu několik balíčků, nastavím název svého datového souboru a použiji základní R. stáhnout soubor
funkce ke stažení CSV ze Zillow. Konečné kroky přípravy dat: Importujte tento soubor CSV do R a vyfiltrujte řádky, kde Město
je Boston
. (K importu dat používám balíček rio, protože mám rád rio, ale můžete použít něco podobného read_csv ()
nebo fread ()
.) Pokud to sledujete, můžete filtrovat na jiné město.
knihovna (dplyr)knihovna (ggplot2)
# Název souboru, do kterého chci stáhnout data:
myfilename <- "Zillow_ne Neighborhood_home_values.csv"
# Pokud go.infoworld.com/ZillowData nefunguje, je úplná adresa URL
# //files.zillowstatic.com/research/public/Ne Neighborhood/Ne Neighborhood_Zhvi_Summary_AllHomes.csv
download.file ("// go.infoworld.com/ZillowData", myfilename)
bos_values%
filtr (město == "Boston")
Dále vytvořím vodorovný sloupcový graf s některými přizpůsobeními, která často používám. Řadím pruhy od nejvyšší po nejnižší hodnoty, načrtávám je černě, obarvuji je modře a měníme výchozí šedé pozadí ggplot2.
ggplot (data = bos_values, aes (x = změnit pořadí (RegionName, Zhvi), y = Zhvi)) +geom_col (color = "black", fill = "# 0072B2") +
xlab ("") +
ylab ("") +
ggtitle ("Zillow Home Value Index by Boston Neighborhood") +
theme_classic () +
téma (plot.title = element_text (velikost = 24)) +
coord_flip ()
Co když bych chtěl vytvořit vlastní funkci pro rychlé generování takového grafu s jakýmkoli datovým rámcem? Přesněji řečeno, funkce se vstupními argumenty názvu datového rámce, sloupce x, sloupce y a názvu grafu?
Níže je uveden jeden pokus o vytvoření funkce s názvem mybarplot
s přizpůsobením, které chci, bez použití balíčku rlang. Nebude to však fungovat.
mybarplot <- funkce (mydf, myxcol, myycol, mytitle) {ggplot (data = mydf, aes (x = změna pořadí (myxcol, myycol), y = myycol)) +
geom_col (color = "black", fill = "# 0072B2") +
xlab ("") +
ylab ("") +
coord_flip () +
ggtitle (mytitle) +
theme_classic () +
téma (plot.title = element_text (velikost = 24))
}
Ukážu vám, co se stane, když se pokusím tuto funkci zavolat pomocí nekotovaných názvů sloupců. Například:
mybarplot (bos_values, RegionName, Zhvi,„Zillow Home Value Index by Boston Neighborhood“)
Výsledkem je, že se zobrazí chyba, jak vidíte ve videu výše. Kdybych zavolat funkci s citovanými názvy sloupců, dostanu graf - ale ne graf, který chci.
Sharon Machlis,To je způsobeno tím, že základna R potřebuje citované názvy sloupců, zatímco ggplot nikoli.
Starší verze balíčku rlang měly vícestupňové řešení, protože jsem to popsal v dřívější epizodě „Do More With R“, „Tidy Eval in R.“ The proud verze rlang řeší problém s novým operátorem zvaným uklizený operátor vyhodnocení - dvojité složené závorky. Prostě vložíte složené závorky kolem nekotovaných názvů sloupců do své funkce a máte hotovo!
Aby to fungovalo, potřebujete alespoň verzi 0.4.0 balíčku rlang. V době, kdy jsem psal tento článek, byla verze 0.4.0 na CRANu, ale bylo nutné ji zkompilovat ze zdroje, když byla tato možnost poskytnuta během instalace, alespoň na Macu.
V níže uvedeném kódu načtu rlang a vyladím svou funkci bar plot, takže pokaždé, když odkazuji na název sloupce v ggplot, obklopím ho dvojitými složenými závorkami - „curly curly“ je způsob, jakým na to tvůrci balíčků odkazují.
knihovna (rlang)mybarplot <- funkce (mydf, myxcol, myycol, mytitle) {
ggplot2 :: ggplot (data = mydf, aes (x = změnit pořadí ({{myxcol}}),
{{myycol}}), y = {{myycol}})) +
geom_col (color = "black", fill = "# 0072B2") +
xlab ("") +
ylab ("") +
coord_flip () +
ggtitle (mytitle) +
theme_classic () +
téma (plot.title = element_text (velikost = 24))
}
Nyní můžu volat svou funkci s
mybarplot (bos_values, RegionName, Zhvi,„Zillow Home Value Index by Boston Neighborhood“)
Stejně jako u funkcí tidyverse jsem nepotřeboval dávat názvy sloupců do uvozovek. Vytvoří graf, jako je ten níže
Sharon Machlis,Stále mohu vylepšit graf vytvořený mou funkcí pomocí dalších příkazů ggplot. V dalším bloku kódu uložím graf vytvořený vlastní funkcí do proměnné a poté provedu další změny. The geom_text ()
kód zobrazí střední hodnotu na každém sloupci a téma()
nastavuje velikost nadpisu grafu.
mygraph <- mybarplot (bos_values, RegionName, Zhvi,„Zillow Home Value Index by Boston Neighborhood“)
mygraph +
geom_text (aes (label = scales :: comma (Zhvi, prefix = "$")),
hjust = 1,0, color = "white", position = position_dodge (.9), size = 4) +
téma (plot.title = element_text (velikost = 24))
Nový graf by vypadal takto:
Sharon Machlis,Další tipy R najdete na stránce „Do More With R“ na nebo v playlistu „Do More With R“ na YouTube.