При изменении размера гробов из списка возникает ошибка "Назначаемое значение должно быть единицей"
Я пытаюсь эффективно изменить размеры гробов для создания качественных графиков публикаций. Я неоднократно сталкиваюсь с одной и той же ошибкой в тех случаях, когда я использую код, предложенный в ответах на переполнение стека, и где этот код, кажется, включает (я думаю) работу с гробами, которые находятся в форме списка.
Вот отдельный пример, взятый из того, что выглядит как отличный ответ на предыдущий вопрос о переполнении стека (ссылка внизу):
library(grid)
library(gridExtra)
library(ggplot2)
morletPlots <- replicate(5, ggplot(), simplify = FALSE)
rawplot <- replicate(5, ggplot(), simplify = FALSE)
glets <- lapply(morletPlots, ggplotGrob)
graws <- lapply(rawplot, ggplotGrob)
rawlet <- function(raw, let, heights=c(4,1)){
g <- rbind(let, raw)
panels <- g$layout[grepl("panel", g$layout$name), ]
# g$heights <- grid:::unit.list(g$heights) # not needed
g$heights[unique(panels$t)] <- lapply(heights, unit, "null")
g
}
combined <- mapply(rawlet, raw = graws, let=glets, SIMPLIFY = FALSE)
grid.newpage()
grid.arrange(grobs=combined, ncol=2)
Когда я пытаюсь запустить это, я получаю:
Ошибка в
[<-.unit
(*tmp*
, уникальный (панели $t), значение = список (4, 1)): назначаемое значение должно быть единицей
Что я делаю неправильно, пытаясь заставить этот (и подобный код) работать?
Пример взят из ответа баптиста на этот вопрос
1 ответ
Некоторый код мог измениться во времени. Классы объектов были перепутаны в процессе. Это работает:
library(grid)
library(gridExtra)
library(ggplot2)
morletPlots <- replicate(5, ggplot(), simplify = FALSE)
rawplot <- replicate(5, ggplot(), simplify = FALSE)
glets <- lapply(morletPlots, gta)
graws <- lapply(rawplot, ggplotGrob)
rawlet <- function(raw, let, heights=c(4,1)){
g <- gtable_rbind(let, raw)
panels <- g$layout[grepl("panel", g$layout$name), ]
g$heights[unique(panels$t)] <- unit(heights, units = "null")
g
}
combined <- mapply(rawlet, raw=graws, let=glets, SIMPLIFY = F)
grid.newpage()
grid.arrange(grobs=combined)
Некоторый код мог измениться во времени. Классы объектов были перепутаны в процессе.