无法将 textGrob 作为 main 传递给 do.call("arrangeGrob")

Unable to pass textGrob as main to do.call("arrangeGrob")

同时

test <- do.call("arrangeGrob", c(plots.list[1:2],ncol=2,main=("test")) 

工作正常,

test <- do.call("arrangeGrob", c(plots.list[1:2],ncol=2,main=textGrob("test")))

给出以下错误:

"Error in arrangeGrob(list(grobs = list(list(x = 0.5, y = 0.5, width = 1, : input must be grobs!"

我需要 main 是一个 textGrob 以便设置字体大小和字体。有人知道我做错了什么吗?

经过几个小时的谷歌搜索,我在发布问题后直接找到了答案......

以下作品:

test <- do.call("grid.arrange",c(plots.list, ncol=2, main =substitute(textGrob("test"),env = parent.frame())))

问题是因为 do.call 的参数列表不正确,

c(list(1, 2), ncol=1, textGrob("a"))

"exposes" textGrob 的内容,而你真的想追加两个列表,

c(list(1, 2), list(ncol=1, textGrob("a")))

应用于你的问题,这就变成了

do.call("grid.arrange", c(plots.list[1:2],list(ncol=2, main=textGrob("test")))) 

但请注意即将推出的 gridExtra 版本 (>= 2.0.0) 不再识别 main,您应该使用 top 代替

do.call("grid.arrange", c(plots.list[1:2],list(ncol=2, top=textGrob("test")))) 

并且,由于 arrangeGrob 获得了一个新的 grobs 参数,您不再需要 do.call

grid.arrange(grobs=plots.list[1:2], ncol=2, top=textGrob("test"))