Я использую R и ggplot2 для анализа статистики баскетбола. Я новичок в R и ggplot, и мне нравятся результаты, которые я получаю, учитывая мой ограниченный опыт. Но когда я иду, я обнаружил, что мой код повторяется; что мне не нравится.Рефакторинг повторяющегося кода ggplot
Я создал несколько участков, подобных этому:
Код:
efgPlot <- ggplot(gmStats, aes(EFGpct, Nrtg)) +
stat_smooth(method = "lm") +
geom_point(aes(colour=plg_ShortName, shape=plg_ShortName)) +
scale_shape_manual(values=as.numeric(gmStats$plg_ShortName))
Только разница между грядами является й-значением; Следующий сюжет будет:
orPlot <- ggplot(gmStats, aes(ORpct, Nrtg)) +
stat_smooth(method = "lm") + ... # from here all is the same
Как я мог реорганизовать это, так что я мог бы сделать что-то вроде:
efgPlot <- getPlot(gmStats, EFGpct, Nrtg))
orPlot <- getPlot(gmStats, ORpct, Nrtg))
Update
Я думаю, что мой путь рефакторинга это не действительно «R-ish» (или ggplot-ish, если хотите); основанный на комментарии Baptiste ниже, я решил это, не перерабатывая что-либо в функцию; см. my answer below.
Я бы предположим, что вы 'расплава()' ваш набор данных в длинном формате, с 'm = melt (gmStats, id =" Nrtg ")'. Затем вы можете построить график с помощью 'ggplot (m, aes (Nrtg, value)) + facet_wrap (~ variable) + ...' или использовать 'dlply (m," variable ", plottingFunction)' для создания нескольких графиков. – baptiste
Попробуем это тоже. Пока я принял ответ Джорана, но это хорошее предложение для меня изучить. – Marijn
@baptiste - ваш расплав + facet_wrap - отличное решение, я опубликовал код, который я в конечном итоге использовал в [ниже] (http://stackoverflow.com/a/10862755/322283). – Marijn