【发布时间】:2014-11-24 20:03:29
【问题描述】:
我正在尝试为 rgl 包编写一个小插图。我想我会尝试使用 knitr 和 markdown 来生成 HTML 小插图,这样我就可以包含交互式显示以及快照。
Rstudio 的最新版本包括 pandoc 并使用 rmarkdown 包将输入处理为 HTML,但并非所有系统(显然包括 R-forge)都包括 pandoc,并且 knitr 回退到一些旧版本的 markdown 处理。
我发现,根据我使用的是 pandoc 路径还是较旧的路径,我会向我的 rgl 设备报告不同的大小。使用 Yihui 的knitr::hook_webgl 函数作为钩子,图像最终会放大两倍。以像素为单位的大小是在该函数中使用线计算的
rgl::par3d(windowRect = 100 + options$dpi * c(0, 0, options$fig.width,
options$fig.height))
这里,options 是传递给函数的参数之一。它包含块选项。
为了获得正确的大小,我需要将 dpi 除以 2。另一方面,在旧驱动程序中使用相同的代码可以正常工作。
这是 knitr 中的错误,还是我在某处遗漏了一些选项?
这是在 RStudio 中使用 pandoc 生成的示例,修改了 hook_rgl 以将大小除以 2。数字是我想要的大小:
http://www.stats.uwo.ca/faculty/murdoch/temp/rgl.html
这是在没有 pandoc 的系统上处理的相同输入文件。请注意,rgl 数字是原来的一半:
【问题讨论】:
-
你如何定义
options?除非你重写了options(),否则你应该得到options$dpi的错误 -
options 是 hook_rgl 的一个参数。标头是
function (before, options, envir)。 -
这有什么关系?这不是问题,也不是我问的问题,这不是您使用的功能 (
rgl::par3d),也不是您使用options的方式 -
我引用了 knitr::hook_rgl 的一句话。 options 是该函数的参数。 (事实上,相关的是 knitr::hook_webgl,但他们都有那一行。我将编辑我的问题以将 hook_rgl 更改为 hook_webgl。)
-
仅作记录,问题已报告给github.com/yihui/knitr/issues/901
标签: r knitr r-markdown rgl