我有一个稍微复杂的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文件中,您实际上看不到注释所描述的代码。
也许可以以某种方式将相关块写入文件而不进行评估,然后再读入文件?我还没想办法...
答案 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!
说明:
funcdef
是完整的函数定义,如果我们要使用它,则需要它; echo=-1
省略),以便其他行不会错误地用'x' not found
(偶数如果我不评估或包含);请注意,它使用相同的块名称,并且其中没有任何内容function
标头和大括号的情况下打破函数主体的原因是,echo=
使用数字允许我们对包含表达式的子集进行子集化,而不是行 ...和函数声明是一个表达式我对此不喜欢的两件事:
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>>
}
```
。