修改knitr chunk

时间:2015-06-05 01:06:23

标签: r knitr rnw

我想知道是否可以在knitr读取的外部R脚本中挂钩代码。

具体来说,假设您有以下R文件

test.R

## ---- CarPlot
library(ggplot2)
CarPlot <- ggplot() +
    stat_summary(data = mtcars,
                 aes(x = factor(gear),
                     y = mpg
                     ),
                 fun.y = "mean",
                 geom = "bar"
                 )
CarPlot

想象一下,您想在多个报告中使用此图表,但在其中一个报告中,您希望图表具有标题,而在另一个报告中则不需要。

理想情况下,我希望能够使用相同的外部R脚本来执行此操作,以便在我决定更改图表的某些内容时,我不必对多个R文件进行更改。

我认为,或许这样做的一种方法是将fig.show chunk选项设置为hold - 因为它会&#34; hold all plots and output them in the very end of a code chunk&#34; - 然后像这样在剧情上添加标题:

test.Rnw

\documentclass{article}

\begin{document}

<<external-code, cache=FALSE,echo=FALSE>>=
read_chunk('./test.R')
@

<<CarPlot,echo=FALSE,fig.show='hold'>>=
CarPlot <- CarPlot + ggtitle("Plot about cars")
@

\end{document}

然而,这不起作用。虽然打印了情节,但我试图追加的标题却没有显示出来。

有什么办法可以做我想做的事吗?

1 个答案:

答案 0 :(得分:2)

您不希望显示由test.R创建的情节,因此您应为该照片组设置fig.show = 'hide'include = FALSE

<<external-code, cache=FALSE,echo=FALSE,fig.show = 'hide'>>=
read_chunk('./test.R')
@

想要在修改后显示情节,所以你必须打印它:

<<CarPlot,echo=FALSE>>=
CarPlot <- CarPlot + ggtitle("Plot about cars")
CarPlot
@
如果您有一个大型代码块可以在中间打印一个绘图,但是您不希望在您的文档中显示该绘图直到结束,则使用

fig.show = 'hold'。它并不适用于这种情况。