Backround
Я читал этот превосходный ответ о том, как разместить самонастраивающийся текст в столбцы: Изменяемый размер текстовых защелок внутри столбцов
После прочтения немного по ggproto
и особенно по виньетке Расширение ggplot Мне было интересно, почему автор должен был определить подпрограмму setup_data
следующим образом:
GeomFit <- ggproto("GeomFit", GeomRect,
setup_data = function(data, params) {
data$width <- data$width %||%
params$width %||% (resolution(data$x, FALSE) * 0.9)
transform(data,
ymin = pmin(y, 0), ymax = pmax(y, 0),
xmin = x - width / 2, xmax = x + width / 2, width = NULL
)
})
Поскольку это, по сути, копия вставки из ggplot2::GeomBar
:
GeomBar$setup_data
# <ggproto method>
# <Wrapper function>
# function (...)
# f(...)
# <Inner function (f)>
# function (data, params)
# {
# data$width <- data$width %||% params$width %||% (resolution(data$x,
# FALSE) * 0.9)
# transform(data, ymin = pmin(y, 0), ymax = pmax(y, 0), xmin = x -
# width/2, xmax = x + width/2, width = NULL)
# }
Так что я подумал, что могу заменить это просто:
GeomFit <- ggproto("GeomFit", GeomRect,
setup_data = function(self, data, params)
ggproto_parent(GeomBar, self)$setup_data(data, params))
Этот подход работает, но у меня есть сомнения, может ли это привести к нежелательному поведению, просто потому что родительский класс GeomFit
равен GeomRect
, а не GeomBar
.
Вопрос
Можно ли (в смысле: нет условий, в которых это может вызвать проблемы) использовать ggproto_parent
для вызова функции из класса, который не является родительским классом моего ggproto
объекта? Почему ggproto_parent
имеет аргумент parent
в первую очередь? Разве родитель не должен быть в любом случае определен вторым аргументом ggproto
?