在knitr + RMarkdown中等效于Python等的\ Sexpr {}?

时间:2015-09-21 14:02:43

标签: python r knitr r-markdown pdflatex

在R Markdown中,我可以在R代码块中设置一个对象,然后在我的文档正文中具有该对象的值,如下所示:

```{r}
TMP<-"Blue"
TMP
```

The sky is `r TMP`

我编译的PDF文档中的输出如下所示:

TMP<-"Blue"
TMP
## [1] "Blue"
The sky is Blue

此功能非常有用。但是,我不想仅限于使用R代码。我希望能够使用其他语言在代码块中设置对象,然后以相同的方式在文本中调用它们的值。

RMarkdown + knitr很好地允许你用其他语言编写和编译这些代码块,但是我没有找到任何办法在我的文档中调用这些对象的值。这种格式在RMarkdown中或者来自LaTeX的\ Sexpr {}函数的方式。如果它更容易,我愿意使用不同的文档系统来实现这一目标。我见过像this这样的问题,但这根本没有用,因为我将使用的脚本比那样的小单行更长,更复杂。

这是一个完整的RMarkdown文档,详细说明了R的当前行为,以及Python等所需的(相同)行为。

title: "SAMPLE"
author: "me"
date: "September 21, 2015"
output: 
  pdf_document: 
    keep_tex: yes
---
```{r}
TMP<-"Blue"
TMP
```

You can insert the value of an object created with an R code chunk into text like this:
The sky is `r TMP`

```{r,engine='python'}
COLOR = "red"
print COLOR
```

You cannot do the same thing with Python, or other types of code:
The car is  `python COLOR`

1 个答案:

答案 0 :(得分:1)

使用reticulate来调用Python形式R并将结果返回给R对象,而不是试图更改或扩展内联代码定界符以解释多种语言。

如下所示修改.rmd文件。确保为要使用的python版本使用正确的路径。有关此rmd文件的注意事项是,所有内容都通过R进行评估。Python代码通过[{ levelid: 1, levelname: "level1", chapter: [{ chapternumber: 1, chaptername: "chapter1", content: "chapter1-content" }, { chapternumber: 2, chaptername: "chapter2", content: "chapter2-content" }] }] 进行评估,结果通过py_run_string调用返回到R环境。

py_to_r

生成的PDF看起来像这样:

enter image description here