我可以在 rcpp 源 C++ 函数中使用 fprintf 吗?
Can I use fprintf within a rcpp-sourced C++ function?
我有一些在网上找到的代码,我想在 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
>
请注意,我必须转义引号和反斜杠才能与 cppFunction()
一起使用。因此,如果这对您不起作用 ,则说明您的 terminal/display 有问题。你用的是哪个?
b) 但是你不应该使用它——Writing R Extensions 对此非常清楚。
c) 这就是为什么我们主要使用 wrapper Rcpp::Rcout
和 Rcpp::Rcerr
的原因,它们根据需要重定向到 R 自己的缓冲 input/output 编写 R 扩展。
我有一些在网上找到的代码,我想在 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
>
请注意,我必须转义引号和反斜杠才能与 cppFunction()
一起使用。因此,如果这对您不起作用 ,则说明您的 terminal/display 有问题。你用的是哪个?
b) 但是你不应该使用它——Writing R Extensions 对此非常清楚。
c) 这就是为什么我们主要使用 wrapper Rcpp::Rcout
和 Rcpp::Rcerr
的原因,它们根据需要重定向到 R 自己的缓冲 input/output 编写 R 扩展。