如何解释Rmarkdown中的复杂功能?

时间:2019-11-28 06:28:05

标签: r r-markdown

我有一个稍微复杂的R函数(不同的部分引用了我想解释的各种方程式。) 我想使用R Markdown编写代码,但是我需要能够解释文档中函数的不同部分。有点像识字编程。

我想知道是否可以将函数定义拆分为不同的代码块,或者是否可以在函数定义内插入markdown注释?

我希望最终结果看起来像这样:

complicated = function(x) {

我在示例中使用了 x ^ 2 ,因此它是数学运算,但又简短。这是实际的R代码中的代码:

  x^2
}

这不起作用:

``` {r}
complicated = function(x) {
```
explain the function with some math $x^$.
``` {r}
 x^2
}
```

以下实际上有效有效:

``` {r chunk1, echo=FALSE}
complicated=function(x) {
  x^2
}
```

``` {r chunk1, echo=1:2, eval=F}
```
In the complicated function I use x^2 as an example.

尽管有点棘手,因为如果函数中的行发生更改,我必须再次编辑所有内容。同样在Rmd文件中,您实际上看不到注释所描述的代码。

注意:

也许可以以某种方式将相关块写入文件而不进行评估,然后再读入文件?我还没想办法...

2 个答案:

答案 0 :(得分:0)

这是一种方法,尽管我承认这有点骇人听闻。

---
title: "Split Function"
output: html_document
---

```{r funcdef}
myfunc <- function(x) {
  x <- x + 1
  x <- x * 2
  return(x)
}
```

```{r funcdef1, echo = FALSE, eval = FALSE, include = FALSE}
x <- NULL
  x <- x + 1
  x <- x * 2
  return(x)
```

First line:

```{r funcdef1, echo=2, eval = FALSE}
```

Now the last two:

```{r funcdef1, echo=3:4, eval = FALSE}
```

Done!

rmd, rendered into html

说明:

  • 第一个块funcdef是完整的函数定义,如果我们要使用它,则需要它;
  • 第二个块包含第一行(我不回声,用echo=-1省略),以便其他行不会错误地用'x' not found偶数如果我不评估或包含);请注意,它使用相同的块名称,并且其中没有任何内容
  • 与第三块相同
  • 我必须在没有function标头和大括号的情况下打破函数主体的原因是,echo=使用数字允许我们对包含表达式的子集进行子集化,而不是 ...和函数声明是一个表达式

我对此不喜欢的两件事:

  1. 它要求您两次包含函数的主体,因此维护的开销比所需的更多;
  2. 当我真正想要的只是引用代码时,它认为正在使用x

坦率地说,这可能并不比将代码的各个部分包括在每个后续块中(并设置eval=FALSE)要好得多。

答案 1 :(得分:0)

尽管看起来有点像编织错误,但我找到了一个很好的答案。我希望它不会解决。事实证明,对块的引用在Rmd中就像在Rnw中一样。您只需要使用OriginalCallable来引用大块即可。

所以,这是答案:

<<chunk name>>

简单,对吧?

在Rstudio中,它只有在我们将所有内容编织在一起时才起作用,而在运行单个块时则不起作用。几乎是有道理的。

要解决此问题,请在控制台中运行以下命令:```{r Xsquare, eval=F} x^2 ``` We just need to take x and raise it to the second power: $x^2$. Now let us put it together: ```{r complicated, eval=T} complicated = function(x) { <<Xsquare>> } ```