2015-07-17 3 views
3

Я пытаюсь выявить проблему с grobWidth, применяемым к объектам gtable (см. gtable:::widthDetails.gtable); проблема возникает тогда, когда размер определяется как сумма единиц (unit.arithmetic объекта),отсутствует метод S3, но работает более высокий уровень функции

library(grid) 
u = unit(1,"npc") + unit(2,"mm") 
grid:::absolute.units(u) 
#Error in UseMethod("absolute.units") : 
# no applicable method for 'absolute.units' applied to an object of class #"c('unit.arithmetic', 'unit')" 

Примечательно, что absolute.size работает, даже если он называет grid:::absolute.units,

grid::absolute.size(u) 
#[1] 1null+2mm 

Как это возможно?

+0

Вам не нужно устанавливать рамку для печати перед использованием блоков npc? –

+1

нет, но забавно это вызывает еще одну проблему: 'grid :: absolute.size (unit (1," in ") + unit (2," mm "))' yielding '1null + 2mm'. И я думал, что имперские подразделения сбивают с толку. – baptiste

ответ

3

OK, просмотр grid source code, я обнаружил, что метод является определено,

grid:::absolute.units.unit.arithmetic(u) 

, но это не экспортируется. Так что absolute.size() знает об этом, потому что он находится в пространстве имен пакетов, но вызов его извне (например, gtable) терпит неудачу.

+0

Я думал, что вы создали сетку:} – rawr

+0

простая ошибка с моим киви-акцентом – baptiste

Смежные вопросы