【问题标题】:What is the difference between knitr ```{} chunks and <<>> chunks?knitr ```{} 块和 <<>> 块有什么区别?
【发布时间】:2016-12-12 03:15:28
【问题描述】:

我见过两个尖括号:

<<>>= 
...
@

和反勾号:

```{}
...
```

用于在 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
```

【问题讨论】:

    标签: r knitr


    【解决方案1】:

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

    您建议的替换

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

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

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

    搞清楚这一切的最简单方法可能就是做一些实验。

    【讨论】:

    • 谢谢。所以我猜我可以在这里交换&lt;&lt;&gt;&gt; ... @ 代码:yihui.name/knitr/demo/minimal```{}?
    • RStudio 称其为“R Sweave”,这似乎有点多余。 “R LaTeX”会更贴切,真的,更平行于“R Markdown”和“R HTML”。
    【解决方案2】:

    一个区别似乎是在使用块引用来重用块时,由this questionlink to the documentation on Reference/Macro 解决,它只使用&lt;&lt;&gt;&gt; 类型的块。复制示例:

    <<chunk1>>=
    1 + 1
    @
    
    <<chunk2>>=
    <<chunk1>>
    @
    

    这样第二块就简单地复制了chunk1中的代码。

    要将其转换为反勾号块,您似乎需要这样做:

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

    也就是说,按照我的问题和 Ben Bolker 的回答中的建议直接替换。但是,要引用块 1,似乎仍然需要尖括号

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

    另外,请注意保持代码不变:

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

    不起作用,至少对于 rmarkdown::render 而言,文件以 .Rmd 扩展名保存。

    【讨论】:

      猜你喜欢
      • 2015-11-25
      • 2023-01-12
      • 2011-04-10
      • 2011-08-23
      • 2013-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多