Как сохранить вывод моей функции с именем, основанным на ее аргументе? - PullRequest
0 голосов
/ 10 февраля 2020

Я хочу создать ряд боксов, описывающих распределение баллов для студентов из разных регионов. Так как рейтинг региона будет отличаться для разных программ, я хочу создать сюжет для каждой программы. Готовый продукт должен выглядеть примерно так:

enter image description here

Я не могу использовать обычную фасетку, так как порядок областей на графиках будет отличаться. Поэтому я создаю отдельные графики для каждой программы и вызываю их через ggarrange.

Однако для этого требуется написать практически идентичный код для каждой программы, я хотел бы автоматизировать этот процесс.

Исходный код выглядит следующим образом:

boxplots_region_anime <- fulldata%>%filter(urvalsgrupp!="omregistrerad" & antalreg<=1)%>%
filter(totstatus_tri!="tidigt avbrott eller återbud" & program=="Animation")%>%
ggplot(aes(x=fct_reorder(LADOK_REGION, PERC_CREDIT, .fun = median,na.rm=T), y = PERC_CREDIT)) +
geom_boxplot() + coord_flip()+theme(axis.text.y=element_text(size=18))

boxplots_region_ippe <- fulldata%>%filter(urvalsgrupp!="omregistrerad" & antalreg<=1)%>%
filter(totstatus_tri!="tidigt avbrott eller återbud" & program=="IPPE")%>%
ggplot(aes(x=fct_reorder(LADOK_REGION, PERC_CREDIT, .fun = median,na.rm=T), y = PERC_CREDIT)) +
geom_boxplot() + coord_flip()+theme(axis.text.y=element_text(size=18))

Для каждой программы меняется только название программы («Анимация» для первой и «IPPE» для второй) и имя вывода.

Я пытаюсь автоматизировать это, используя эту функцию:

boxplots_region<-function(z){data<-fulldata%>%
filter(urvalsgrupp!="omregistrerad" & antalreg<=1)%>%
filter(totstatus_tri!="tidigt avbrott eller återbud" & program==z)%>%
ggplot(aes(x=fct_reorder(LADOK_REGION, PERC_CREDIT, .fun = median,na.rm=T), y = PERC_CREDIT)) +
geom_boxplot() + coord_flip()+theme(axis.text.y=element_text(size=18))
assign(paste0("boxplots_region_",z),data)
rm(data)}

Мы будем использовать строки символов в качестве аргументов, поэтому в нашем примере «IPPE» или «Анимация»

.... Идея заключается в том, что функция должна сохранять выходные данные в переменную с именем "boxplots_region_ [имя_программы].

Однако, похоже, это не работает, что я делаю неправильно ?

выборка данных:

    structure(list(start_date = structure(c(15585, 15585, 15585, 
15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585, 
15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585, 
15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585, 
15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585, 
15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585, 15585, 
15585, 15585), class = "Date"), program = c("IPPE", "IPPE", "IPPE", 
"IPPE", "IPPE", "IPPE", "IPPE", "IPPE", "IPPE", "IPPE", "IPPE", 
"IPPE", "IPPE", "IPPE", "IPPE", "IPPE", "IPPE", "IPPE", "IPPE", 
"IPPE", "IPPE", "IPPE", "IPPE", "IPPE", "IPPE", "IPPE", "IPPE", 
"IPPE", "IPPE", "IPPE", "IPPE", "IPPE", "IPPE", "IPPE", "IPPE", 
"IPPE", "IPPE", "IPPE", "IPPE", "IPPE", "IPPE", "IPPE", "IPPE", 
"IPPE", "IPPE", "IPPE", "IPPE", "IPPE", "IPPE", "IPPE"), PERC_CREDIT = c(70.8333333333333, 
91.6666666666667, 95.8333333333333, 25, 0, 0, 25, 79.1666666666667, 
0, 0, 0, 93.0555555555556, 0, 0, 0, 95.8333333333333, 95.8333333333333, 
0, 0, 79.1666666666667, 62.5, 0, 8.33333333333333, 0, 0, 0, 87.5, 
4.16666666666667, 83.3333333333333, 25, 95.8333333333333, 79.1666666666667, 
20.8333333333333, 0, 0, 95.8333333333333, 0, 91.6666666666667, 
58.3333333333333, 4.16666666666667, 0, 33.3333333333333, 66.6666666666667, 
0, 72.5, 29.1666666666667, 4.16666666666667, 0, 95.8333333333333, 
12.5), LADOK_REGION = structure(c(10L, 10L, 3L, 3L, 1L, 3L, 1L, 
1L, 10L, 3L, 1L, 3L, 1L, 1L, 1L, 3L, 9L, 1L, 1L, 5L, 4L, 1L, 
4L, 1L, 1L, 1L, 2L, 7L, 7L, 10L, 3L, 3L, 2L, 3L, 2L, 3L, 4L, 
2L, 10L, 3L, 1L, 3L, 5L, 1L, 3L, 3L, 2L, 1L, 10L, 3L), .Label = c("oklart", 
"ÖVRIGA LANDET", "STORGÖTEBORG", "VÄSTERGÖTLAND", "VÄNERSBORG", 
"SÖDRA BOHUSLÄN", "NORRA BOHUSLÄN", "UDDEVALLA", "DALSLAND", 
"TROLLHÄTTAN"), class = c("ordered", "factor")), totstatus_tri = structure(c(3L, 
3L, 1L, 3L, 2L, 1L, 3L, 1L, 3L, 3L, 2L, 3L, 2L, 2L, 2L, 1L, 1L, 
2L, 2L, 1L, 3L, 2L, 3L, 2L, 2L, 2L, 1L, 3L, 1L, 3L, 1L, 3L, 3L, 
3L, 3L, 1L, 3L, 3L, 3L, 3L, 2L, 3L, 3L, 2L, 3L, 3L, 3L, 2L, 1L, 
3L), .Label = c("pågående studier", "tidigt avbrott eller återbud", 
"sent avbrott"), class = c("ordered", "factor")), urvalsgrupp = c("betyg m. komplettering", 
"betyg m. komplettering", "HP", "Byte inom program el. direktantagning", 
"betyg", "'Sen Anmälan'", "'Sen Anmälan'", "HP", "betyg m. komplettering", 
"HP", "betyg", "HP", "'Sen Anmälan'", "HP", "HP", "betyg", "'Sen Anmälan'", 
"betyg", "'Sen Anmälan'", "betyg", "betyg", "betyg", "betyg", 
"betyg", "HP", "betyg", "betyg", "betyg", "betyg m. komplettering", 
"'Sen Anmälan'", "betyg", "betyg", "HP", "betyg", "betyg", "betyg", 
"HP", "betyg", "HP", "betyg", "HP", "betyg", "betyg", "betyg", 
"betyg", "betyg", "HP", "betyg", "betyg", "omregistrerad"), antalreg = c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L)), row.names = c(NA, -50L), groups = structure(list(start_date = structure(15585, class = "Date"), 
    .rows = list(1:50)), row.names = c(NA, -1L), class = c("tbl_df", 
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"))
...