R check不喜欢std:cout(C++)

Cla*_*dia 7 c++ r

我正在尝试向包含C++代码的CRAN提交一个包(我对c ++没有任何线索,cpp文件是由其他人编写的).

R检查抱怨'std :: cout'(C++)编译代码不应该调用可能终止R的入口点,也不应该写入stdout/stderr而不是写入控制台,也不应该写入C RNG

我在代码中找到了以下命令:

 integrate_const(stepper_type( default_error_checker< double >( abs_error , rel_error ) ),
                mDifEqn,
                x,
                0.0,
                (precipitationLength * timeStep), 
                timeStep,
                streaming_observer(std::cout) ); 
Run Code Online (Sandbox Code Playgroud)

我猜R(CRAN)期待别的东西而不是std :: cout ...但是什么?

Dir*_*tel 8

您的C++项目可能正在使用标准输入和输出.

正如Writing R Extensions手册中所讨论的那样,你最终会混合两个输出系统:R和C++.

所以你被"鼓励"取代所有用途,比方说,

 std::cout << "The value of foo is " << foo << std::endl;
Run Code Online (Sandbox Code Playgroud)

喜欢的东西

 Rprintf("The value of foo is %f\n", foo);
Run Code Online (Sandbox Code Playgroud)

这样你的输出就可以和R一起正确混合.在我的一个(非Rcpp)软件包中,我不得不为此进行大量繁琐的修补...

现在,正如@vasicbre的评论和@Dason的回答中所提到的,如果你使用Rcpp,你可以简单地做

 Rcpp::Rcout << "The value of foo is " << foo << std::endl;
Run Code Online (Sandbox Code Playgroud)

如果你已经使用Rcpp这很容易,否则你需要决定是否值得添加Rcpp ......

编辑:修复拼写错误Rcpp::Rcout.