2016-05-05 6 views
0

これは簡単な質問ですが、私はCppを初めて使っています。同じcppファイル内に2つのrcpp関数があります

私はRcppを使用して、Rで関数を作成しました:

// [[Rcpp::export]] 

私はRで関数を呼び出すことができますし、意図した通りに動作します。それをF1()としましょう。

次に、最初の関数を呼び出す同じファイルcppに別の関数F2()を作成します。標準の関数呼び出し言語(すなわち、F1(arguments))を使用し、sourceCpp()を使用すると、Rを通じて正常にコンパイルされます。私はRでF2()を呼び出すしようとする。しかし、私が手:evalの中

エラー(exprの、ENVIR、enclos):機能 "F2" を見つけることができませんでした

任意のアドバイスはありますか?

ありがとうございました。あなたが輸出のコメント// [[Rcpp ::輸出]]を提供する必要があり、各機能については

#include <Rcpp.h> 
using namespace Rcpp; 


// [[Rcpp::export]] 
NumericVector F1(NumericVector x) { 
    return x * 2; 
} 
NumericVector F2(NumericVector x) { 
    return x *F1(x); 
} 
// even if i put return x*x*x instead of x*F1(X), I got the same error 

/*** R 
F1(42) 
F2(51) 
*/ 
+2

エクスポートする関数ごとにエクスポート宣言が必要です。 verbose = TRUEを指定してsourceCppを呼び出すと、生成されるコードを正確に見ることができます。 – nrussell

+1

これも重複した質問です... –

答えて

1

。 この行は、関数をRに送るために重要です。あなたのコードは、次のように記述する必要があります。

#include <Rcpp.h> 
using namespace Rcpp; 


// [[Rcpp::export]] 
NumericVector F1(NumericVector x) { 
    return x * 2; 
} 
// [[Rcpp::export]] 
NumericVector F2(NumericVector x) { 
    return x *F1(x); 
} 


/*** R 
F1(42) 
F2(51) 
*/ 
+0

非常に感謝しています。 – Melek

関連する問題