knitr``` {} chunk与<<>>之间有什么区别?块?

时间:2016-12-12 03:15:29

标签: r knitr

我见过两个斜角括号:

<<>>= 
...
@

并返回滴答声:

```{}
...
```

用于表示knitr文档中的“块”。这两者有什么区别?

例如,我可以从documentation

替换以下代码块吗?
<<my-label, eval=TRUE, dev='png'>>=
set.seed(1213)  # for reproducibility
x = cumsum(rnorm(100))
mean(x)  # mean of x
plot(x, type = 'l')  # Brownian motion
@

使用:

```{r my-label}
set.seed(1213)  # for reproducibility
x = cumsum(rnorm(100))
mean(x)  # mean of x
plot(x, type = 'l')  # Brownian motion
```

2 个答案:

答案 0 :(得分:4)

反引号语法用于Rmarkdown文档(Markdown与R代码混合:通常存储为文件扩展名.rmd),而角括号语法用于混合LaTeX和R代码的文档(通常存储为.Rnw)。我不知道该怎么称呼后者;他们曾经是“Sweave文档”,但Sweave包已基本上被knitr包取代。但是,knitr(和rmarkdown包)都可以同时处理markdown + R和LaTeX + R文档......

建议您替换

```{r chunklabel,..options..}
...
```

<<chunklabel,..options..>>=
...
@

看似合理(并且很容易尝试一下!)当然,您需要确保您使用的knitr / rmarkdown工具知道您的语法类型是什么从...开始。 knitr::knit似乎(基于文档)从文件扩展名中猜测。 rmarkdown::render的文档仅讨论.rmd

解决所有问题的最简单方法可能只是做一些实验。

答案 1 :(得分:0)

使用块引用来重用由this questionlink to the documentation on Reference/Macro处理的块时,似乎只有一个区别,它只使用<<>>类型的块。复制示例:

<<chunk1>>=
1 + 1
@

<<chunk2>>=
<<chunk1>>
@

这样第二个块只会复制chunk1中的代码。

要将其转换为后退标记块,您似乎需要执行以下操作:

```{r chunk1}
1 + 1
```

就是我的问题和Ben Bolker的答案所建议的直接替换。但是,要引用块1,似乎仍然需要有角度的括号

```{r chunk2}```
<<chunk1>>
```

此外,请注意将代码保留为:

<<chunk2>>=
<<chunk1>>
@

不起作用,至少与rmarkdown::render一起使用.Rmd扩展名保存的文件。