ggSave group_by df список объектов ggarrange'd ggplot

Я использовал group_by, do и ggplot - дважды - для создания двух простых dfs даты (группы) и списка выходных данных ggplot, большое спасибо за помощь в примерах на этом сайте. Упрощенный пример:

p1 <- df_i %>% group_by(Date) %>% do(
plots = ggplot(data = .) +
geom_line() #etc, hugely long and detailed ggplot call omitted for brevity, but it works fine
) # close do

Затем я могу присоединиться к этим dfs,

p1 <- cbind(p1, p2[,2])
names(p1) <- c("Date", "Temp", "Light") #Temp & Light were both "plots" from above

И выполните цикл по строкам, сохраняя выходные данные в 1-рядном (верхний и нижний объект) ggarranged png:

for (j in 1:nrow(p1)) { 
      ggsave(file = paste0(p1$Date[j], ".png"),
             plot = arrangeGrob(p1$Temp[[j]], p1$Light[[j]]),
             device="png",scale=1.75,width=6.32,height=4,units="in",dpi=300,limitsize=TRUE)
}

Все идет нормально. Но природа не терпит for-loop, поэтому я пытался сделать ggsaving в group_by, используя те же параметры параметров ggsave, меняя только то, что необходимо, учитывая разницу в индексировании for-loop и (как я понимаю) group_by подмножества:

p1 %>% group_by(Date) %>%
      ggsave(file = paste0(.$Date, ".png"),
             plot = arrangeGrob(Temp, Light),...) #other params hidden here for brevity

Ошибка в grDevices::png(..., res = dpi, unit = "in"): неверный аргумент 'pointsize'

Если я добавлю pointsize=10, он скажет «недопустимое значение bg»; добавить bg = "white":

Ошибка в check.options(new, name.opt = ".X11.Options", envir = .X11env): неверные аргументы в 'grDevices::png(..., res = dpi, unit = "in")' ( нужны именованные аргументы)

(Я также пытался понизить dpi безрезультатно). Возможно, я делаю это неправильно, например. замена %>% на %$% в предложении Влада от magrittr:

Error in gList(list(list(data = list(DateTimeUTCmin5 = c(915213660, 915213780,  : 
  only 'grobs' allowed in "gList"

Это дает ту же ошибку с Date и .$Date в вызове ggsave. Попытка воссоздать фреймворк do:

 p1 %>% group_by(Date) %>%
      do(ggsave(file = paste0(.$Date, ".png"),"_", .$Date, ".png"),
             plot = arrangeGrob(Temp, Light), #etc

Ошибка в аранжировкеGrob(Temp, Light): объект Temp не найден

p1 %>% group_by(Date) %>%
      do(ggsave(file = paste0(.$Date, ".png"),"_", .$Date, ".png"),
             plot = arrangeGrob(.$Temp, .$Light), #etc

Ошибка в gList(list(list(data = list(DateTimeUTCmin5 = c(915213660, 915213780, : в gList) разрешены только 'grobs'

Что дает ту же ошибку, если я использую %$%.

Есть ли у кого-нибудь связанный стек понимания этих инструментов, чтобы они могли видеть, что я здесь делаю неправильно? Кажется, я должен быть близко, но я все больше блуждаю в темноте. Любые указатели очень ценятся. Заранее спасибо!

В равной степени, если люди рекомендуют другой подход, мне тоже интересно. Мне кажется, что я мог бы использовать lapply (или parSapply) вместо for-loop на p1 df. Операции над grouped dfs опережают apply операции?

[Редактировать: желаемый окончательный результат: ggsave выгружает 1 изображение (с 2 графиками на нем) за дату в указанную папку. По сути, если я смогу заставить ggsave работать в grouped_df, это должно быть так]


person dez93_2000    schedule 14.11.2019    source источник
comment
Можете ли вы описать, каким вы хотите, чтобы ваш окончательный результат был?   -  person Nova    schedule 14.11.2019
comment
о, да, извините, добавил сейчас   -  person dez93_2000    schedule 14.11.2019