我在使用knitr时很难显示C ++代码(通过内联包中的cxx函数编写)。这是一个MWE:
<html>
<body>
<!--begin.rcode
library(Rcpp)
library(inline)
test <- cxxfunction(signature(xR="numeric"), body="
double x = as<double>(xR);
return(wrap(x));
", plugin="RcppArmadillo")
end.rcode-->
</body>
</html>
当我编写这段代码时,它通过用&#34; \ n&#34;替换所有新行来重新格式化body参数。这让人很难阅读。有什么解决办法吗?
答案 0 :(得分:3)
现在你有两个理由切换到Rcpp属性:首先,它更容易使用。其次,它在knitr中呈现得更好:)
以下代码应该这样做 - 而不是Attributes如何为您处理所有转换:
library(Rcpp)
library(inline)
cppfunction('double mytest(double x) {
return x;
}', depends="RcppArmadillo")
尝试在knitr中渲染。
答案 1 :(得分:2)
release notes of knitr 1.6中列出了重大更改:默认的块选项tidy = TRUE
已更改为FALSE
。这就是为什么您的换行符不再使用 knitr 1.6转换为文字\n
。
答案 2 :(得分:1)
另一种选择是在knitr中使用Rcpp引擎:
```{r, engine = "Rcpp"}
#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
double meanC(NumericVector x) {
int n = x.size();
double total = 0;
for(int i = 0; i < n; ++i) {
total += x[i];
}
return total / n;
}
```
该块将语法突出显示为C ++,并且该函数将可用于cppFunction()
的其他块。唯一的缺点是编译没有缓存。