编织 Rmarkdown 块时,不同的语言(尤其是 Rcpp)不打印输出

Different language (esp. Rcpp) not printing output when knitting an Rmarkdown chunk

这在 Rstudio 中有效,当 运行 块时,我直接在文档中获得实时预览。但是,当我将 .Rmd 编​​织到 .html 时,我只得到代码的回显而没有输出。

```{r engine='Rcpp'}
#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
int main() {
  return 4;
}

/*** R
main()
*/
```

如果我对 python 做同样的事情,我会在编织时得到正确的输出:

```{r engine='python'}
print("abc")
```

不幸的是,评论标记 (/***R */) 的执行由于您注意到的执行方式而没有得到保留。你可以说这是一个 rmarkdown 小号;但是,/***R */ 更适用于在交互式开发过程中嵌入调用。

此外,使用 int main() 是一个很大的禁忌。引用德克的话:

You can't just drop R context into a standalone main() as you need R for R context.

因此,我选择将函数名称更改为 toad()

要获得相同的结果并真正实现文学编程,每个部分都应嵌入单独的代码块中。也就是说,您必须创建一个 Rcpp 代码块---最好启用缓存---和一个包含实际功能的 R 代码块打电话。

例如

---
title: Test Doc
author: JJB
date: 6/9/2017
output: html_document
---


```{Rcpp hpc-code, cache = TRUE}
#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
int toad() {
  return 4;
}
```

```{r interactive-output}
toad()
```