Rcppを学習し、次の2つの関数を記述しています。 2番目の関数は単にsum(log_gamma(x)) - log_gamma(sum(x))を計算します。ここでxはベクトルです。Rcppを使用した場合のデータ型変換エラー
3つのデータ型変換エラーが返されますが、すべて解決できません。誰かがコードを修正するのを助けることができますか?ありがとう。
file330c72cf6532.cpp:8:37: error: cannot convert 'Rcpp::sugar::Vectorized<Rf_lgammafn, true, Rcpp::Vector<14, Rcpp::PreserveStorage> >' to 'SEXP' in initialization
SEXP lgamma_x = lgamma(x);
^
file330c72cf6532.cpp:10:45: error: cannot convert 'SEXP' to 'double' in initialization
double up = sum_cpp(lgamma_x_vec);
^
file330c72cf6532.cpp:11:44: error: cannot convert 'Rcpp::sugar::Vectorized<Rf_lgammafn, true, Rcpp::Vector<14, Rcpp::PreserveStorage> >' to 'double' in initialization
double down = lgamma(sum_cpp(x));
^
cppFunction(
'double sum_cpp(NumericVector x){
double tmp = 0;
int n = x.size();
for(int j = 0; j<n; j++){
tmp = tmp + x[j];
}
return tmp;
}')
cppFunction('double LogB_cpp(NumericVector x){
Function sum_cpp("sum_cpp") ;
SEXP lgamma_x = lgamma(x);
NumericVector lgamma_x_vec(lgamma_x);
double up = sum_cpp(lgamma_x_vec);
double down = lgamma(sum_cpp(x));
return up - down;}')
ありがとうございます!それは多くの意味があります。 –