Furrr future_map от R не использует тему ggplot для сессии
Я столкнулся с довольно странной проблемой. Я устанавливаю тему сеанса по умолчанию ggplot (используя theme_set
), Затем я вызываю функцию для сохранения графиков, используя furrr::future_map
, Это не использует тему сессий по умолчанию. Однако это прекрасно работает с purrr::map
,
Я создал воспроизводимый пример, который является большим упрощением моей реальной проблемы. В моей реальной проблеме я выполняю некоторые другие вычисления внутри функции, перед построением и сохранением (именно поэтому я хочу использовать future_map
как я знаю только для сохранения графиков, это не сильно увеличивает производительность).
Если я просто строю график внутри функции и назначаю объекту, тогда новая тема отображается в интерфейсе построения графиков RStudios для обоих, но даже если я затем сохраняю, используя future_map
он все еще использует старую тему. Интересно, если я загружу пакет cowplot
которая меняет тему по умолчанию, это работает.
Существует очевидный обходной путь, чтобы установить мою тему как объект и добавить, используя p + newtheme
внутри функции, но, во-первых, мне любопытно, почему это может происходить, и, во-вторых, мои графики уже сложны, и у меня довольно много разных функций, выполняющих разные задачи, поэтому я действительно хотел бы иметь возможность использовать настройки по умолчанию для темы,
Так у кого-нибудь есть идеи, почему они разные, если есть и другие тонкие различия между furrr::future_map
а также purrr::map
это могло легко остаться незамеченным, и если есть способ, которым я могу заставить тему придерживаться (как удастся сделать коровье пятно)?
Править Я понял, что одна разница после загрузки коровника заключается в том, что cowplot::ggsave
используется вместо ggplot2::ggsave
Я пытался явно ссылки, которые ggsave
использовать и без разницы в результатах
ВНИМАНИЕ, этот пример сохранит файлы в папку C:\temp
library(ggplot2)
library(purrr)
library(furrr)
plan(multiprocess)
testSaveplot <- function(n,data = mtcars, saveDir = "C:/temp", saveSuffix = ""){
p <- ggplot(data, aes(wt, mpg, colour = as.factor(cyl))) + geom_point()
ggsave(plot = p, filename = file.path(saveDir, paste0("TestingPlot",n,saveSuffix,".png")),
width = 6, height = 6)
}
# Use overall default for both map and future map
map(1:5, testSaveplot)
future_map(1:5, testSaveplot, saveSuffix = "future")
#Create a source file to change the theme and source
sourceString <- "theme_set(theme_dark()+theme(legend.position = 'bottom'))"
writeLines(sourceString,"C:/temp/TestSource.R" )
source("C:/temp/TestSource.R")
#Run again using map and future_map - only map is plotted with new theme
map(1:5, testSaveplot, saveSuffix = "newtheme")
future_map(1:5, testSaveplot, saveSuffix = "newtheme_future")