В последнее время я использую RcppArmadillo
, но я заметил некоторые несоответствия в порядке печати определенных объектов. В частности, при использовании cout
и print()
. Иногда сначала печатается print()
, затем cout
; а в другие времена все наоборот.
Я не понимаю точно, почему это происходит. Я полагаю, что cout
и print()
называются асинхронно и, следовательно, разница в порядке, но почему это происходит? И как это можно предотвратить?
Пример
Если у меня есть следующий test_order.cpp
файл
#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]
using namespace Rcpp;
using namespace arma;
// [[Rcpp::export]]
int test(int n){
cout << "Print 1\n";
arma::mat X(n, n);
cout << "Print 2\n";
X.print();
cout << "Print 3\n";
return 1;
}
И вызвать его из R следующим образом:
library(Rcpp)
sourceCpp("test_order.cpp")
test(3)
При печати я получаю разные результаты. Три различных результата следующие:
> test(3)
2.1220e-314 0 6.9531e-310Print 1
Print 2
2.3044e-314 6.9275e-310 6.9532e-310
2.1916e-314 2.1916e-314 2.2718e-314
Print 3
[1] 1
> test(3)
Print 1
Print 2
6.9531e-310 2.3044e-314 4.9407e-324
6.9532e-310 2.1916e-314 4.9407e-324
0 6.9275e-310 4.9407e-324
Print 3
[1] 1
> test(3)
6.9531e-310 2.3044e-314 4.9407e-324
6.9532e-310 2.1916e-314 4.9407e-324
0 6.9275e-310 4.9407e-324Print 1
Print 2
[1]Print 3
1