2016-09-17 7 views
0

input_parameter私はRcppとsourceCppコマンドでcppのコードはRcpp ::特性」に 'SEXP' を変換することはできません:: <double>

#include <Rcpp.h> 

using namespace Rcpp; 

// [[Rcpp::export]] 

void print_mat(double *Mat, int nbLig, int nbCol) { 

int i, j; 

for (i = 0; i < nbLig; i++) { 

    for (j = 0; j < nbCol; j++) 

    printf("%f ", *(Mat + (nbCol * i) + j)); 

    putchar('\n'); 
    } 
} 

次実行したい場合は、私は

を見ます引数 '1'〜 'void print_mat(double *、int、int)'を 'double *'に変換することはできません。 print_mat(* Mat、 nbLig、nbCol)

どう

+0

2番目のforループの最後に行方不明の括弧がありますか?あなたのコードにも入力ミスがありますか? – MikeMB

答えて

1

簡単に言えば、このエラーを取り除く:

  • あなたのインターフェースはそれは我々がRから行列を渡す方法はありませんが、すべて間違っていました。

    #include <Rcpp.h> 
    using namespace Rcpp; 
    
    // [[Rcpp::export]] 
    void print_mat(NumericMatrix Mat) { 
        int nbLig = Mat.nrow(), nbCol = Mat.ncol(); 
        int i, j; 
        for (i = 0; i < nbLig; i++) { 
        for (j = 0; j < nbCol; j++) 
         Rprintf("%f ", Mat(i,j)); 
        Rprintf("\n"); 
        } 
    } 
    
    /*** R 
    print_mat(matrix(1:9,3)) 
    */ 
    
    :マトリックスアクセスが故に執筆R拡張機能ごとに

を印刷するために使用Rprintf()修理バージョンの必要性

  • 間違っていた、それと多数掲載例とドキュメント
  • を見ます

    ここでは、使用例も紹介しました。 Rにそれを引っ張ることは言うに

    R> sourceCpp("/tmp/foomat.cpp") 
    
    R> print_mat(matrix(1:9,3)) 
    1.000000 4.000000 7.000000 
    2.000000 5.000000 8.000000 
    3.000000 6.000000 9.000000 
    R> 
    

    言うまでもなくをもたらし、あなたはまた、単一のコマンドを使用してこれを取得することができます:あなたがRのように行と列ヘッダー与える

    // [[Rcpp::export]] 
    void print_mat2(NumericMatrix Mat) { 
        print(Mat); 
    } 
    

    R> print_mat2(matrix(1:9,3)) 
        [,1] [,2] [,3] 
    [1,] 1 4 7 
    [2,] 2 5 8 
    [3,] 3 6 9 
    R> 
    
  • 関連する問題