Как я могу использовать qnorm на Rcpp? - PullRequest
4 голосов
/ 16 марта 2012
require(inline)
func <- cxxfunction(, 'return Rcpp::wrap( qnorm(0.95,0.0,1.0) );' ,plugin="Rcpp")

ошибка: нет соответствующей функции для вызова ‘qnorm5 (double, int, int)’

require(inline)
func <- cxxfunction(, 'return Rcpp::wrap( qnorm(0.95, 0.0, 1.0, 1, 0) );' 
                   ,plugin="Rcpp")

ошибка: нет соответствующей функции для вызова ‘qnorm5 (double, double, double, int, int)’

require(inline)
code <-'
double a = qnorm(0.95, 0.0, 1.0);
return  Rcpp::wrap( a );
' 
func <- 
cxxfunction(, code ,plugin="Rcpp")
func()

ошибка: нет функции соответствия для вызова ‘qnorm5 (double, double, double)’

Как я могу использовать qnorm на Rcpp?

1 Ответ

7 голосов
/ 16 марта 2012

Используя аргументы mean и sd double, как показано в сообщении об ошибке - попробуйте это полный пример

library(inline)
f <- cxxfunction(signature(xs="numeric", plugin="Rcpp", body='
     Rcpp::NumericVector x(xs);
     return Rcpp::wrap(Rcpp::qnorm(x, 1.0, 0.0));
')

и посмотрите на примеры и модульные тесты - я только что посмотрел это в файле модульных тестов runit.stats.R, в котором есть много тестов для этих статистических функций 'Rcpp sugar'.

Редактировать 2012-11-14: С Rcpp 0.10.0, выпущенным сегодня, вы можете позвонить сделать подпись R::qnorm(double, double, double, int, int), если вы хотите использовать написанный код в стиле C против Rmath.h. Rcpp сахар все еще дает вам векторизованные версии.

...