Невозможно передать textGrob в качестве основного для do.call("rangeGrob")

В то время как

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!"

Мне нужно, чтобы основным был textGrob для установки размера шрифта и шрифта лица. У кого-нибудь есть идея, что я делаю не так?

2 ответа

Решение

Проблема заключается в том, что список параметров для do.call не является правильным,

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

"выставляет" содержимое 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"))

После нескольких часов поисков в Google я нашел ответ сразу после публикации вопроса.....

Следующие работы:

test <- do.call("grid.arrange",c(plots.list, ncol=2, main =substitute(textGrob("test"),env = parent.frame())))
Другие вопросы по тегам