knitr:块的延迟执行

knitr:块的延迟执行,r,knitr,R,Knitr,我有一个Rmd文件,其中有一些函数及其说明,还有一些函数的示例。 由于示例在逻辑上必须遵循它们相关的函数,因此它们的执行应该相对于它们的函数源延迟 test.Rmd文件可以绘制如下: Function f ---------- The function f blah .... ```{r f.code, eval=!delay} f=function() g() # depends on g ``` f example --------- Use f as follows: `

我有一个Rmd文件,其中有一些函数及其说明,还有一些函数的示例。
由于示例在逻辑上必须遵循它们相关的函数,因此它们的执行应该相对于它们的函数源延迟

test.Rmd
文件可以绘制如下:

Function f
----------

The function f blah ....    

```{r f.code, eval=!delay}
f=function() g() # depends on g
```

f example
---------

Use f as follows:

```{r f.demo, eval=delay}
f()
```

Function g
----------

The function g blah ....

```{r g.code, eval=!delay}
g=function() return(1) 
```
其中,
delay
标签(用于函数示例)表示块应在函数之后执行

我将此功能用于编织:

knit2=function(file){
  require(knitr); require(rmarkdown)
  delay=FALSE
  knit(file)
  delay=TRUE
  knit(file)
  render(file, "html_document")
}
```

knit2('test.Rmd')

既然我不是knitr专家,我想知道这是否是正确的方法。

为什么不在开头用
echo=F
在一个块中定义
g
?然后,您可以随意使用
g
,当您想要显示定义时,只需将相同的代码放在一个块中,使用
echo=T
eval=F
@Gregor:2个函数,这是有意义的。22或222跟踪依赖项是不可行的。此外,如您所见,代码遵循文档,文档顺序倾向于按字母顺序或文档部分。