我正在尝试向 CRAN 提交一个包含 C++ 代码的包(我对 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) );
我想 R (CRAN) 期望的是其他东西而不是 std::cout...但是什么?
最佳答案
您的 C++ 项目很可能正在使用标准输入和输出。
正如 Writing R Extensions 手册中所讨论的,问题是您最终会混合两个输出系统:R 和 C++ 输出系统。
因此,“鼓励”您替换所有用法,例如,
std::cout << "The value of foo is " << foo << std::endl;
用类似的东西
Rprintf("The value of foo is %f\n", foo);
这样您的输出就可以与 R 正确混合。在我的一个(非 Rcpp)包中,我不得不为此做很多繁琐的修补......
现在,正如@vasicbre 的评论和@Dason 的回答中提到的,如果你使用 Rcpp,你可以简单地做
Rcpp::Rcout << "The value of foo is " << foo << std::endl;
如果您已经在使用 Rcpp,这很容易,否则您需要决定是否值得添加 Rcpp...
编辑:修复了 Rcpp::Rcout
中的拼写错误。
关于c++ - R 检查不喜欢 std :cout (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28004717/