带有嵌入式 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
.
我有一个 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
.