如何在chunk中更改knitr选项

时间:2012-07-26 12:04:54

标签: r options knitr chunks

您好我想更改大块选项,中间块,而不必创建新的块..

运行以下代码我希望得到两个非常不同的大小输出,但由于某种原因,似乎并非如此。

另外第二个情节根本没有绘图......(当你把它改为绘图(2:1000)时会这样做...但是无论哪种方式,第二个输出都与第一个相同。两个{{ 1}}。我做错了什么?

请注意'mid chunk'的重要性,原因是我想在运行函数时多次更改块选项以获得不同大小的不同输出。

fig.width=7

sessionInfo输出如下:

```{r}
sessionInfo()

opts_chunk$set(fig.width=3)

plot(1:1000)

opts_chunk$set(fig.width=10)

plot(1:1000)

```

html preview

2 个答案:

答案 0 :(得分:9)

根据Yui在github上的提示,这对我有用。

\documentclass{article}

\begin{document}
<<setup,echo=FALSE>>=
opts_knit$set(progress = F, verbose = F)
opts_chunk$set(comment=NA, warning=FALSE,message=FALSE,fig.width=6, echo=F)
kexpand=function(){
  cat(knit(
  text=knit_expand(text=
                     "<<yfig-{{cap}}-,fig.cap='{{cap}}',results='markup',echo=FALSE,fig.height={{figheight}},out.height={{outheight}}>>=\n
                   .q\n
                   @"
  )
))}
@

<<results='asis'>>=
library(ggplot2)
.q=qplot(1:10);cap="first caption";figheight=9;outheight=90
kexpand()
.q=qplot(1:20);cap="second caption";figheight=12;outheight=160
kexpand()

@
\end{document}

所以一个关键的事情是设置进度和详细到F否则会破坏输出。然后,小函数kexpand扩展了一个内联模板,该模板作为函数的一部分输入为文本。 然后,您可以将图表定义为.q,将标题定义为上限,高度等。您可以调整函数以控制其他选项。 奇怪的是,.q和标题不一定是函数的参数,你可以在当前环境中设置它们,无论如何它们都被函数拾取。不知道这是好的做法还是为什么有效,但确实如此。

答案 1 :(得分:5)

两个问题:当你想要保留两个数字时,请使用

```{r fig.keep='all'}

默认仅保留唯一图(因为您的两个图是相同的,第二个图被删除;有关详细信息,请参阅knitr graphics manual)。

当下一个块打开时,全局块选项处于活动状态:

```{r}
opts_chunk$set(fig.width=10)
```


```{r}
opts_chunk$set(fig.width=2)
# Our figure is 10 wide, not 2
plot(1:1000)
```

```{r}
# Our figure is 2 wide, not 10
opts_chunk$set(fig.width=10)
plot(1:1000)
```