Как используется блестящий::markRenderFunction?
Вопрос Как я могу изменить размер графиков rgl в Shiny RMarkdown? обсуждается тот факт, что трудно установить размер rglwidget
в динамическом документе R Markdown. Проблема заключается в том, что функция вывода Shiny устанавливает размер, но нет очевидного способа передать ему какие-либо аргументы, поэтому всегда используется размер по умолчанию 512 x 512.
rgl::renderRglwidget
функция написана в соответствии с примером в htmlwidgets::shinyRenderWidget
, который не предоставляет способа передать выходные аргументы:
rglwidgetOutput <- function(outputId, width = '512px', height = '512px'){
shinyWidgetOutput(outputId, 'rglWebGL', width, height, package = 'rgl')
}
renderRglwidget <- function(expr, env = parent.frame(), quoted = FALSE) {
if (!quoted) { expr <- substitute(expr) } # force quoted
shinyRenderWidget(expr, rglwidgetOutput, env, quoted = TRUE)
}
Как видно из shiny
документация, которую следует использовать shiny::markRenderFunction
чтобы разрешить outputArgs
чтобы быть переданным, но нет никаких примеров, которые я могу найти.
Что должно renderRglwidget
похоже использовать shiny::markRenderFunction
?
1 ответ
Оказывается, это довольно просто, хотя может быть несколько предостережений. rglwidgetOutput
Функция была в порядке, как это было, но renderRglwidget
необходимо изменить на
renderRglwidget <- function(expr, env = parent.frame(), quoted = FALSE,
outputArgs = list()) {
if (!quoted) { expr <- substitute(expr) } # force quoted
markRenderFunction(rglwidgetOutput,
shinyRenderWidget(expr, rglwidgetOutput, env, quoted = TRUE),
outputArgs = outputArgs)
}
Связанный вопрос Как я могу изменить размер графиков rgl в Shiny RMarkdown? был отредактирован, чтобы показать, как это используется.
Предостережения: настройка outputArgs = list(height = "auto")
появляется, чтобы выбрать нулевую высоту, а не оставшуюся высоту окна. width = "auto"
действительно работает после изменения размера окна; до изменения размера он выглядит слишком большим. Точно так же, используя процентные значения дляwidth
или же height
неудовлетворительны Указание целочисленных значений или строк с px
единицы (например, width = "300px"
Выглядит хорошо.