cbind на объектах ggplotGrob завершается с ошибкой в ​​mmm ‹ каждый: сравнение этих типов не реализовано

Похоже, это похоже на проблему, которую @baptiste пытался обойти еще в 2014 году. Я пересматриваю код, который написал в июне, который включал создание трех ggplotGrob и их объединение с вызовом cbind. Теперь этот код завершается ошибкой с сообщением: «Ошибка в mmm ‹ each : сравнение этих типов не реализовано».

Я думал, что это будет специфично для моего конкретного приложения, но мне удалось сделать очень простой воспроизводимый пример. Даже если cbind выполняется на двух идентичных ggplotGrob, этот код все равно не работает.

library(ggplot2)
library(gtable)

# Make some plots
pl1 <- ggplot(mtcars, aes(x = disp, y = mpg)) +
    geom_point()
pl2 <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species)) +
    geom_point()

# Convert to grobs
pl1_grob <- ggplotGrob(pl1)
pl2_grob <- ggplotGrob(pl2)

# Bind them together -- Error!
combined_grob <- cbind(pl1_grob, pl2_grob)

Ошибка и соответствующая трассировка здесь:

> combined_grob <- cbind(pl1_grob, pl2_grob)
Error in mmm < each : comparison of these types is not implemented
> traceback()
8: comp(x_val, y_val)
7: unit(comp(x_val, y_val), x_unit)
6: compare_unit(x$heights, y$heights, pmax)
5: cbind_gtable(x, y, size = size)
4: f(init, x[[i]])
3: Reduce(function(x, y) cbind_gtable(x, y, size = size), gtables)
2: cbind(deparse.level, ...)
1: cbind(pl1_grob, pl2_grob)

Этот код не работает с R-3.4.2 в OS X 10.11.6 с grid_3.4.2, gtable_0.2.0 и ggplot2_2.2.1 И с R-3.3.2 в Linux (скомпилирован из исходного кода в Ubuntu 16.04) с grid_3.3.2 , gtable_0.2.0 и ggplot2_2.2.1.

Перед выполнением приведенного выше примера я заметил, что одна из виньеток в пакете "lemon" ("gtable_show_lemonade") не работает в самом конце с той же ошибкой при cbind двух gtables. Я подтвердил эту ошибку, запустив код для этой виньетки из исходного кода, который выглядит примерно так:

library(lemon)
edit(vignette('gtable_show_lemonade', package = 'lemon'))
# Then use whichever editor you opened to copy the temporary filename
# of the vignette source, and run this with source()

Скомпилированная виньетка (с ошибкой cbind) находится здесь: https://cran.r-project.org/web/packages/lemon/vignettes/gtable_show_lemonade.html

Сбой во время компиляции виньетки был получен с использованием вышеупомянутого экземпляра R-3.4.2, работающего на OS X 10.11 (El Capitan).

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

ОБНОВИТЬ:

Это "только" проблема, если указано size = 'max', которое используется по умолчанию (или size = 'min'). Я думаю, что могу обойти это, используя size = 'first' или size = 'last', которые не выполняют оскорбительные сравнения высоты, но, конечно, неудобно, что поведение по умолчанию не работает (и есть определенные ситуации, когда size = 'max' полезен).


person scooteR    schedule 14.11.2017    source источник


Ответы (1)


Мне так и не удалось исправить это в gtable, поэтому у gridExtra есть модифицированная версия под названием gtable_cbind.

person baptiste    schedule 15.11.2017