带有嵌入式 R 代码的 Rcpp,不显示 R 代码的输出

Rcpp with embedded R code, show no output of R code

我有一个 cpp 文件,它定义了 c++R 函数,它们使用 Rcpp::sourceCpp().

源到 R

当我获取文件时,也会(部分)打印 R 代码,即使我指定了 showOutput = FALSE(我猜它只适用于 cpp 代码?!)。

现在的问题是:如何在不使用 capture.output() 或类似技巧的情况下抑制部分 R 输出。

MWE

tester.cpp

#include <Rcpp.h>
// [[Rcpp::export]]
Rcpp::NumericVector timesTwo(Rcpp::NumericVector x) {
  return x * 2;
}
/*** R
foo <- function(x) timesTwo(x)
*/

获取文件时,我看到以下内容:

Rcpp::sourceCpp("tester.cpp", showOutput = FALSE)
#> foo <- function(x) timesTwo(x)

更短的 MWE

Rcpp::sourceCpp(code='
#include <Rcpp.h>
// [[Rcpp::export]]
Rcpp::NumericVector timesTwo(Rcpp::NumericVector x) {
  return x * 2;
}
/*** R
foo <- function(x) timesTwo(x)
*/
')

这个问题是否源于对 showOutput 的用途的误解?

看着help(sourceCpp)我们看到

showOutput: ‘TRUE’ to print ‘R CMD SHLIB’ output to the console.

它会影响实际编译步骤,并且与作为可选位添加到运行(如果存在)的任何 R 代码无关。

下面的示例应该可以清楚地说明这一点(并揭示一些 CXX 和其他设置):

> cppFunction("int doubleMe(int i) { return i+i; }", showOutput=TRUE)
/usr/lib/R/bin/R CMD SHLIB -o 'sourceCpp_10.so' 'file99f11710553a7.cpp' 
ccache g++ -I"/usr/share/R/include" -DNDEBUG   -I"/usr/local/lib/R/site-library/Rcpp/include" -I"/tmp/RtmpC7dZ23/sourceCpp-x86_64-pc-linux-gnu-1.0.5.4"    -fpic  -g -O3 -Wall -pipe -pedantic  -c file99f11710553a7.cpp -o file99f11710553a7.o
ccache g++ -Wl,-S -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o sourceCpp_10.so file99f11710553a7.o -L/usr/lib/R/lib -lR
>
> cppFunction("int trippleMe(int i) { return i+i+i; }", showOutput=FALSE)
> 

现在,抑制 R 代码的输出是一个不同的主题,并且与此类代码是否包含通过 Rcpp 生成的元素无关。

最后@MrFlick 指出,如果您不希望 R 代码作为 sourceCpp() 调用的一部分...那么就不要包含此类代码!或者只是打破正则表达式 /*** R.