【发布时间】:2013-07-28 10:29:06
【问题描述】:
我正在尝试使用 R 包 knitr 创建 HTML 文件,但我发现整个体验非常困难,可能是因为在不使用 LaTeX 时(并且当人们不知道 Sweave 时)文档很少。具体问题是这样的:
我希望在 HTML 文件中生成两个相似的图表,但每个图表的高度必须不同。所以这是我的 RHTML 文件:
<!DOCTYPE html>
<html>
<head>
<title>TEST</title>
</head>
<body>
<!--begin.rcode
opts_chunk$set(echo=FALSE, dpi=96, fig.width=9, fig.height=8, dev="png")
print("Width 9, height 8")
plot(rnorm(100), col="orange")
end.rcode-->
<hr>
<!--begin.rcode
opts_chunk$set(echo=FALSE, dpi=96, fig.width=9, fig.height=12, dev="png")
print("Width 9, height 12")
plot(rnorm(100), col="purple")
end.rcode-->
<hr>
</body>
</html>
如您所见,两个(简单)图必须具有相同的宽度(9)但不同的高度(8 然后 12)。这在 R 中非常简单,但 knitr 似乎希望保持纵横比相同。这是两个绘图输出:
如您所见,下面的没有我想要的纵横比,它们是不同的宽度。
另外,我在我的 html 文件的顶部得到了所有这些块输出,我认为我用 echo=FALSE.... 抑制了这些块输出。
我该如何解决所有这些问题? opts_chunk$set 是否只设置了某种全局选项?如果我想在每次输出新图表时重置选项怎么办?以及如何抑制 all knitr 包输出?
【问题讨论】:
-
只是对这些问题进行一般故障排除的建议:确保
cache = FALSE并丢弃数字和缓存子文件夹,以确保它们都得到更新。确保在setup块中设置了尽可能多的选项。然后,只修改它们更改的块中的块选项。此外,我总是将rm(list = ls())放在我的设置块中,以使写入全局环境的某些参数不会挂起。此外,排版会产生中间文件 - 也将它们扔掉以强制新副本。最后,你可以看看knitr中的函数spin。 -
好的,刚刚尝试了所有这些。 rm(列表 = ls());擦除图形目录中的所有png,重新加载浏览器,清除其缓存;没有喜悦。还是一样。由于我实际上并没有排版(它只是 HTML),所以除了“figure”目录之外,您还知道哪些需要清除?顺便问一下,什么是“设置块”?
-
这并不正式,但很多人使用第一个代码块来设置
knitr和R选项和设置。例如,它将具有opts_chunk和library("whatever")。此外,如果您依赖全局变量,您就会错过可重复研究的优点。如果可能的话,让您的脚本生成或至少从csv或RData或类似的东西中获取这些值。 -
不,全局变量会不断更新,是的,我可能应该将它们移动到另一个文件。问题是,它们每个大约 3 gb(使用 termstrc 的大量且高度复杂的收益率曲线分析列表)。反正上面的超级简单还是不行!
-
很抱歉给您带来了困惑。我想我需要在文档中解释这种行为。不过,我所有的示例都在第一个块中执行
opts_chunk$set(),例如this one