将R Markdown代码块设置为数学模式

时间:2015-06-16 22:06:29

标签: r-markdown

我希望使用R Markdown来生成家庭作业和考试解决方案,但我更希望让非编码员更具可读性。

我有办法通过数学模式传递ECHO输出吗?那就是我希望ECHO看起来更“内联”而不像代码。我可以看到如何隐藏它,但在R Markdown Reference Guide我没有看到删除“代码块”的选项并将每行包装在$$(或包装任何东西)。有没有办法做到这一点?

这是一个例子。这个解决方案包含所有内容,但对某些学生来说可能有点刺激(这不是 R课程)。

8-22 ...

a. ...

```{r part_a}

D_0 = 2.40
g = 0.06
r = 0.12

V = D_0*(1 + g)/(r - g)
V
```

相反,我希望看到更像下面的东西。^ [我很欣赏我可以使用一些剪切和粘贴以及文本编辑器生成此输出,我只是想找到最有效的解决方案,因为这是我可能做的事情不止一次或两次。]

8.22 ...

a. ...

$$ D_0 = 2.40 $$
$$ g = 0.06 $$
$$ r = 0.12 $$
$$ V = D_0 \times (1 + g)/(r - g) = 2.40 \times (1 + 0.06)/(0.12 - 0.06) = `r V`$$

1 个答案:

答案 0 :(得分:2)

我有一个部分答案。我还不知道如何将变量x替换为其值,以便a可以使用变量打印公式,替换为数字。但我可以生成"数学代码"阻止这样我就可以解决问题并生成漂亮的解决方案而无需大量剪切和粘贴。

这是一个示例.Rmd文件。

---
author: Richard Herron
title: Homework Solutions
---

8-22 ...

a. ...

There are three parts to this solution.

1. write the equations to solve the problem in R-readable strings.
2. loop over the list and `eval(parse())` the equation strings
3. wrap strings in `$$ $$` with `cat(paste0())`

Chunks should be set to `echo=FALSE` and `results="asis`. You may need to suppress some function output with `invisible()`.


```{r part_a, echo=FALSE, results="asis"}

# just to make sure my eval below works 
rm(list=ls())

# store solution as a list of character equations
solution <- list(
"D_0 = 2.40", 
"g = 0.06", 
"r = 0.12", 
"V = D_0*(1 + g)/(r - g)"
)

# "solve" problem
for (i in seq_along(solution)) eval(parse(text=solution[[i]]))

# display solution as math
cat(paste0("$$", solution, "$$"), sep="\n")
```

Because of the `eval()` loop in the first chunk I can say that $V = `r V`$ in the text that follows.

这是一个将每个.Rmd文件转换为.pdf的外部文件。

# load `render` and set working directory
setwd("C:/Users/Richard/Dropbox/Babson College/SME 2021 for 2015 fall/Homework")

# loop over all Rmd files
require(rmarkdown)
require(tools)
files <- list.files(path=".", pattern="*.Rmd")
roots <- sapply(files, file_path_sans_ext)
namesIn <- paste0("", roots, ".pdf")
namesOut <- paste0("", roots, ".pdf")

# solutions
myPdf <- pdf_document(
    fig_caption=TRUE,
    keep_tex=TRUE,
    pandoc_args=c(
        "--variable=classoption:fleqn", 
        "--variable=classoption:twocolumn", 
        paste0("--metadata=date:", format(Sys.time(), "%B %d, %Y"))
        )
    )
lapply(files, FUN=render, output_format=myPdf)
mapply(file.rename, namesIn, namesOut)

这会产生这个pdf。

enter image description here