0

Armadillo ライブラリを使用して C++ でデータを先取りしていました。プログラムの最終製品は、符号なし整数で満たされた立方体である ucube です。実行後、ucube を R にロードして、最終的な統計テストを実行したいと考えています。そのために、配列を返す ucube をロードする C++ 関数を作成しました。

しかし、うまくいきません!「警告: Cube::load(): B.bin のヘッダーが正しくありません」という警告が表示され
、プログラムは 0x0x0 配列を返します。

その理由を探ろうとして、問題なく動作するおもちゃの C++ プログラムを作成しました。問題なくキューブをロードできます。

#include <iostream>
#include <armadillo>
using namespace arma;

void read_cubes(char const* A, char const* B){

    cube C;
    ucube D;

    C.load(A, arma_binary);
    D.load(B, arma_binary);

}   

int main(int argc, char** argv){

    cube A = randu<cube>(5,5,5);
    ucube B = randi<ucube>(5,5,5, distr_param(1, 10));

    A.save(argv[1], arma_binary);
    B.save(argv[2], arma_binary);

    read_cubes(argv[1], argv[2]);

}

しかし、Rで同じ手順を実行してもうまくいかない理由はわかりません。説明のために、toy プログラムを ./a.out A.bin B.bin として実行してください。Cube<double>後で説明するA.bin と B.binが生成されCube<uword>ます。

問題
Rcpp::sourceCpp を使用して次の C++ コードをソースし、A.bin を読み込もうとすると動作しますが、 Cube<double>B.bin を読み込もうとすると動作しません (警告が表示されます)。read_cube("A.bin")Cube<uword>read_ucube("B.bin")

#include <RcppArmadillo.h>
#include <iostream>
// [[Rcpp::depends(RcppArmadillo)]]

// [[Rcpp::export]]
arma::cube read_cube(char const* x){
    arma::cube A;
    A.load(x, arma::arma_binary);
    return A;
}

// [[Rcpp::export]]
arma::ucube read_ucube(char const* x){
    arma::ucube B;
    B.load(x, arma::arma_binary);
    return B;
}

もちろん、C++ プログラムを終了する前Cube<uword>に を aにキャストすることもできますが、なぜこれが発生するのか、RcppArmadillo でCube<double>a をロードできるかどうかを知りたいです。Cube<uword>できるはずだからですよね?

4

1 に答える 1