我能在一个RCPP源的C++函数中使用fPrimTf吗?

我能在一个RCPP源的C++函数中使用fPrimTf吗?,r,rcpp,R,Rcpp,我有一些在网上找到的代码,我想在R项目中使用。我设法用 libary(Rcpp) sourceCpp("rcpp/my_function.cpp") my_function("testdata.dat", "testout.dat", opt_verbose = 1) 函数中有几个fprintf调用,例如 fprintf(stderr, "Error: minvotes < 0!\n%s", usage);

我有一些在网上找到的代码,我想在R项目中使用。我设法用

libary(Rcpp)
sourceCpp("rcpp/my_function.cpp")
my_function("testdata.dat", "testout.dat", opt_verbose = 1)
函数中有几个fprintf调用,例如

fprintf(stderr, "Error: minvotes < 0!\n%s", usage);
但是,它们不会打印到R控制台。使用该函数时,是否有办法查看fprintf的输出?

以下几点:

a这在任何标准终端的标准R会话中都可以正常工作:

> Rcpp::cppFunction("void printDemo() { fprintf(stderr, \"hello, world\\n\"); }")
> printDemo()
hello, world
> 
请注意,我必须对引号和反斜杠进行转义,以便与cpp函数一起使用。因此,如果这对您不起作用,您的终端/显示器就会出现问题。你用了哪种

但是你不应该使用它-写R扩展是非常清楚的

这就是为什么我们主要使用包装器Rcpp::Rcout和Rcpp::Rcerr,它们根据编写R扩展的需要重定向到R自己的缓冲输入/输出中。

一些事情:

a这在任何标准终端的标准R会话中都可以正常工作:

> Rcpp::cppFunction("void printDemo() { fprintf(stderr, \"hello, world\\n\"); }")
> printDemo()
hello, world
> 
请注意,我必须对引号和反斜杠进行转义,以便与cpp函数一起使用。因此,如果这对您不起作用,您的终端/显示器就会出现问题。你用了哪种

但是你不应该使用它-写R扩展是非常清楚的


这就是为什么我们主要使用包装器Rcpp::Rcout和Rcpp::Rcerr,它们根据编写R扩展的需要重定向到R自己的缓冲输入/输出。

谢谢,Eddelbuettel爵士。令人惊讶的是,在所有Rcpp问题中,您都能快速回答:我现在取代了fprintfstderr,…%s,使用Rcpp:Rcerr您很受欢迎,而且很奇怪。我不认为RStudio会阻止stderr。上面的例子适用于我的Ubuntu 20.10、R4.0.4、RStudio 1.4.1641。哦,好吧。为了完整起见,C级的R也有Rprintf和REprintf——请参阅编写R扩展。实际上,我现在注意到,所有到stderr/stdout的输出都被缓冲和保留,但在我再次获取文件源时会立即打印出来。运行sourceCppmy_function.cpp似乎可以刷新控制台的所有输出。谢谢,Eddelbuettel爵士。令人惊讶的是,在所有Rcpp问题中,您都能快速回答:我现在取代了fprintfstderr,…%s,使用Rcpp:Rcerr您很受欢迎,而且很奇怪。我不认为RStudio会阻止stderr。上面的例子适用于我的Ubuntu 20.10、R4.0.4、RStudio 1.4.1641。哦,好吧。为了完整起见,C级的R也有Rprintf和REprintf——请参阅编写R扩展。实际上,我现在注意到,所有到stderr/stdout的输出都被缓冲和保留,但在我再次获取文件源时会立即打印出来。运行sourceCppmy_function.cpp似乎会刷新控制台的所有输出。