1

问题如何在 Shiny RMarkdown 中更改 rgl 图的大小?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

4

1 回答 1

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)
}

链接的问题如何更改 Shiny RMarkdown 中 rgl 图的大小?已被编辑以显示如何使用它。

警告:设置outputArgs = list(height = "auto")似乎选择零高度而不是剩余的窗口高度。 调整窗口大小width = "auto"似乎确实可以工作;在调整大小之前,它看起来太大了。同样,对or使用百分比值 也不令人满意。用单位(例如)指定整数值或字符串看起来不错。widthheightpxwidth = "300px"

于 2017-03-26T17:14:47.143 回答