r语言 - 从列表中调整 grob 大小时,出现"Value being assigned must be a unit"错误



我正在尝试有效地调整 grobs 的大小以制作出版质量的绘图。在我使用 Stack Overflow 答案中提供的代码的上下文中,我反复遇到相同的错误,并且该代码似乎涉及(我认为(使用列表形式的 grob。

这是一个自包含的示例,取自对先前堆栈溢出问题的一个很好的答案(底部的链接(:

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* , 唯一(panel$t(, 值 = list(4, 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)

某些代码可能已随时间更改。对象的类在进程中被搞砸了。

相关内容

最新更新