При изменении размера гробов из списка возникает ошибка "Назначаемое значение должно быть единицей"

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

Вот отдельный пример, взятый из того, что выглядит как отличный ответ на предыдущий вопрос о переполнении стека (ссылка внизу):

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)

Некоторый код мог измениться во времени. Классы объектов были перепутаны в процессе.

Другие вопросы по тегам