knitr:修改情节勾 - 不一致

时间:2015-08-09 21:25:36

标签: r markdown knitr

我正在尝试修改情节钩子。但是,行为是出于某种原因,取决于我是在编译文件中还是在此之前进行此修改。我想在那之前做(更多文件)。

最小例子:

```{r test}
   print("this is test")
   plot(1:10)
```

通过这个钩修改:

```{r setting, echo=FALSE}
   plot_hook = knit_hooks$get("plot")
   new_plot_hook = function(x, options){
       x = paste0("{random-change}", x)
       plot_hook(x, options)
       }
  knit_hooks$set(plot=new_plot_hook)
```

如果在文件中设置,则在代码块之前,它将编译为:

```r
   print("this is test")
```

```
## [1] "this is test"
```

```r
   plot(1:10)
```
![plot of chunk test]({random-change}figure/test-1.png) 

但是,当我在运行knit之前进行修改时,我得到:

 print("this is test")## [1] "this is test"
 plot(1:10){random-change}figure/test-1.pdf

为什么呢?出了什么问题?为什么knitr在文件编译之前不会让我修改钩子?怎么解决?

编辑:我可能找到了答案: Trying to set Knitr 'document' output hook results in code chunk line breaks being lost

所以我首先需要调用render_markdown()来加载markdown chunk设置,这显着改变了knit_hooks $ get(“plot”)中的代码。然后我可以运行我的代码并用所需的输出编织我的Rmakrdown。

然而,我知道如何,但我仍然不知道为什么。 Yihui在链接答案中提到,那个钩子应该只在文件里面设置。我的理论是,在调用knit时,knitr检测文件类型,因此需要模式类型并为该特定格式设置挂钩。但是,如果我在调用knit之前更改它,那就不行了。

0 个答案:

没有答案