Le 24/11/10 20:03, Andrew Redd a écrit :
OK that fixed that problem. Thanks.
but now I have another.
This is the defined model and function in question.
SEXP gpubayes::data3::stepP(Rcpp::NumericVector sd){
using namespace Rcpp;
RNGScope scope;
NumericVector rng = runif(4);
NumericVector proposals = rnorm(1,0,1);
prior priors[] = {pr_trans};
return wrap<NumericVector>(takeStepP(&(rng[0]),&(proposals[0]),
&(sd[0]), priors));
}
RCPP_MODULE(GPU_BAYES){
using namespace Rcpp;
class_<gpubayes::data3>("data3")
.method("initPat",&gpubayes::data3::initPat)
.method("initSwabs",&gpubayes::data3::initSwabs)
.method("initAugmented",&gpubayes::data3::initAugmented)
.method("setParameters",&gpubayes::data3::setParameters)
.method("augmentedLogLikelihood",&gpubayes::data3::augmentedLogLikelihood)
.method("dataLogLikelihood",&gpubayes::data3::dataLogLikelihood)
.method("step1",&gpubayes::data3::step1)
.method("step2",&gpubayes::data3::step2)
.method("step3",&gpubayes::data3::step3)
.method("step4",&gpubayes::data3::step4)
.method("stepP",&gpubayes::data3::stepP)
.method("stepG",&gpubayes::data3::stepG)
;
}
But when running I get this error, it's not even making it to the compiled code.
R> d3$stepP(3) # R is the data3 object
Error in .External(list(name = "CppMethod__invoke", address =
<pointer: 0x13e2f40>, :
negative length vectors are not allowed
Thoughts?
thanks,
Andrew
Not sure what the problem is. Have you tried with the svn version of Rcpp ?
What is takeStepP ?
Romain
On Wed, Nov 24, 2010 at 11:47 AM, Romain Francois
<rom...@r-enthusiasts.com> wrote:
Le 24/11/10 19:38, Andrew Redd a écrit :
I'm having a problem with sugar expressions that I can't figure out.
I have these two functions that are sampling and prior functions for
two different parameters of an MCMC model. BTW this is part of my big
CUDA project, so I pass these as pointers into other functions.
---
numeric rb1(numeric a, numeric b){return Rcpp::rbeta(1,a,b)[0];}
numeric pr_trans(numeric x){return Rcpp::dnorm(x,0.0, 1024.0)[0];}
---
the first works fine but the second gives a compile error that
error: no matching function for call to ‘dnorm4(numeric&, double,
double)’
numeric is typedef double. I don't see why this fails. Any ideas?
thanks,
Andrew
The first argument of dnorm is a numeric sugar expression (for example
NumericVector).
Try this :
numeric pr_trans(numeric x){return dnorm( NumericVector::create(x) ,0.0,
1024.0)[0];}
Romain
--
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
|- http://bit.ly/9VOd3l : ZAT! 2010
|- http://bit.ly/c6DzuX : Impressionnism with R
`- http://bit.ly/czHPM7 : Rcpp Google tech talk on youtube
_______________________________________________
Rcpp-devel mailing list
Rcpp-devel@lists.r-forge.r-project.org
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
--
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
|- http://bit.ly/9VOd3l : ZAT! 2010
|- http://bit.ly/c6DzuX : Impressionnism with R
`- http://bit.ly/czHPM7 : Rcpp Google tech talk on youtube
_______________________________________________
Rcpp-devel mailing list
Rcpp-devel@lists.r-forge.r-project.org
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel