One approach to achieve this using ggplot2 would be via annotation_custom. To this end you have to convert your map ggplot to a grob using ggplotGrob. To position the map you have to set the coordinates as absolute values using data coordinates:
library(ggplot2)
library(rnaturalearth)
library(rnaturalearthdata)
library(dplyr)
library(ggthemes)
p +
annotation_custom(grob = ggplotGrob(map), xmin = 7.5, xmax = 10, ymax = 10)
A second approach would be to make use of patchwork::inset_element which allows to position the map via relative coordinates:
library(patchwork)
p +
inset_element(map,
left = unit(.75, "npc"), top = unit(.5, "npc"),
bottom = unit(0, "npc") + unit(2, "mm"), right = unit(1, "npc") - unit(2, "mm")
)
Finally, both approaches could be combined with e.g. purrr::map2 to loop over your lists of plots and corresponding maps like so:
plist <- list(p, p)
maplist <- list(map, map)
pmaplist <- purrr::map2(plist, maplist, ~ .x + inset_element(.y,
left = unit(.75, "npc"), top = unit(.5, "npc"),
bottom = unit(0, "npc") + unit(2, "mm"), right = unit(1, "npc") - unit(2, "mm")
))