2016-09-15 2 views
1

私は、この関数(またはそれを返すだけでString)を使用したい:私のR(CPP)のパッケージにはRにC++の関数(または変数)が利用できるようにするとRcpp機能が

const char* ERROR_TYPE() { 
    return "unknown type detected for big.matrix object!"; 
} 

を。

すべてのRcpp関数(src /のファイル)とすべてのテスト(test/testthat /のRファイル)で使用できるようにします。

throw Rcpp::exception(MESSAGE);testthat::expect_error(foo(), MESSAGE)ここで、メッセージはと定義されています。

私はRcpp Attributesで言われていることのいくつかを読んでテストしようとしましたが、それは私の問題では機能していないようです。


私が試した最初のものは、

// [[Rcpp::export]] 
const char* ERROR_TYPE() { 
    return "unknown type detected for big.matrix object!"; 
} 

を定義することですが、それは他のRcppファイルにスコープしません。 次に、#include "myfile.cpp"他のRcppファイルで試しましたが、inlineまたは#ifndef #define #endifを使用しようとしていても複数の定義がありましたが、C++ファイルでは奇妙だと思います。 最後に、私はinst/include/mypackage.hを使用しようとしましたが、そこに自分の関数や変数を定義しましたが、他のC++関数のスコープにもならなかったようです。

1つのトリック、仕事

ERROR_TYPE <- function() { 
    "unknown type detected for big.matrix object!" 
} 

Rの関数を定義してからRcpp機能に

Function err("ERROR_TYPE"); 
throw Rcpp::exception(as<const char*>(err())); 

を使用しているようです。 しかし、良い練習ではないようです。 そして、devtools::test()では動作しますが、devtools::check()やTravis-CIでは機能しませんので、解決策ではありません。

+2

あなたはこれまでに正確に何を試しましたか? [RcppExamples](https://cloud.r-project.org/web/packages/RcppExamples/index.html)パッケージとそのソースコードをGitHubで見てきましたか? –

+0

私の投稿を編集して、その下に行を追加しました。 –

+0

[Rcpp内の別のcppファイルで定義された関数で、あるcppファイルで定義された関数を使用する]の可能な複製(https://stackoverflow.com/questions/44892388/use-function-defined-in-one-cpp-file-in) -function-defined-in-another-cpp-file-in) – coatless

答えて

0
  • 使用inst/include/utils.h

    #ifndef UTILS_H 
    #define UTILS_H 
    
    const char* const ERROR_TYPE = "unknown type detected for big.matrix object!"; 
    
    #endif // UTILS_H 
    
  • それを必要とするすべてのRcppファイルでこのヘッダをインクルードし、このエラーメッセージを返すRcpp機能行います

    #include <bigstatsr/utils.h> 
    
    // [[Rcpp::export]] 
    const char* const GET_ERROR_TYPE() { 
        return ERROR_TYPE; 
    } 
    
  • をあなたのR機能でGET_ERROR_TYPE()を使用してください
関連する問題