0
(이중 입력에서) 감마 함수를 사용하는 원본 R 함수를 (R) cpp로 다시 작성하려고합니다. 원래 소스 아래. sourceCpp를 컴파일 할 때 다음 오류가 발생합니다. "감마 (Rcpp :: traits :: storage_type (< 14> :. 유형) 호출에 일치하는 함수 없음" "Rcpp gamma integral
감마 함수가 설탕에 들어 있어야합니다 .. 당신은 일이 벡터화 Rcpp 설탕의 지점이 너무 복잡하고 있습니다 사용 아래의 수단으로) 그래서 쉽게이 호출 할 필요가 기대
#include <Rcpp.h>
#include <math.h>
using namespace Rcpp;
// original R function
// function (y_pred, y_true)
// {
// eps <- 1e-15
// y_pred <- pmax(y_pred, eps)
// Poisson_LogLoss <- mean(log(gamma(y_true + 1)) + y_pred -
// log(y_pred) * y_true)
// return(Poisson_LogLoss)
// }
// [[Rcpp::export]]
double poissonLogLoss(NumericVector predicted, NumericVector actual) {
NumericVector temp, y_pred_new;
double out;
const double eps=1e-15;
y_pred_new=pmax(predicted,eps);
long n = predicted.size();
for (long i = 0; i < n; ++i) {
temp[i] = log(gamma(actual[i]+1)+y_pred_new[i]-log(y_pred_new[i])*actual[i]);
}
out=mean(temp); // using sugar implementation
return out;
}
잘 작동합니다. 귀하의 설명과 지원에 감사드립니다! –