From edd at debian.org  Tue May 14 15:39:26 2013
From: edd at debian.org (Dirk Eddelbuettel)
Date: Tue, 14 May 2013 08:39:26 -0500
Subject: [Rd] =?utf-8?q?invalid_operands_of_types_=E2=80=98SEXPREC*?=
	=?utf-8?b?4oCZIGFuIGQg4oCYUl9sZW5fdOKAmSB0byBiaW5hcnkg4oCYb3BlcmF0?=
	=?utf-8?b?b3Iv4oCZIHdpdAloIFJjcHAu?=
In-Reply-To: <CAGBzz=Jg5KSKE=0g_i8EyhfjR_k_6ivPpyAmFHhKyVHuQbOLVQ@mail.gmail.com>
References: <CAGBzz=Jg5KSKE=0g_i8EyhfjR_k_6ivPpyAmFHhKyVHuQbOLVQ@mail.gmail.com>
Message-ID: <20882.16014.789871.565579@max.nulle.part>


On 13 May 2013 at 21:42, Xiao He wrote:
| Dear R-Developers,
| 
| I just started learning how to use Rcpp. Earlier while using it, I
| encountered an error as shown below:
| 
| file74d8254b96d4.cpp: In function ?Rcpp::NumericVector
| foo(Rcpp::NumericVector, Rcpp::NumericVector, Rcpp::NumericVector,
| Rcpp::Function, Rcpp::Function)?:
| file74d8254b96d4.cpp:10: error: invalid operands of types ?SEXPREC*? and
| ?R_len_t? to binary ?operator/?
| make: *** [file74d8254b96d4.o] Error 1
| 
| Below is a mock function that can reproduce this error. I wonder if anyone
| can tell me what is the problem here. Thank you in advance!!
| 
| foo<-cppFunction('
|    NumericVector foo(NumericVector q, NumericVector shape1, NumericVector
| shape2, Function pbeta, Function sequence){
|          NumericVector output(q.size());
|          output=pbeta(sequence(q.size())/q.size(), shape1, shape2);
|         return output;
|  }
|  ')

Really briefly:

 1)  Wrong mailing list. Rcpp question are to be sent to rcpp-devel

 2)  Possible error in your function setup.  Why do you supply pbeta?  What is sequence?

 3)  Error in how you call pbeta.  The first argument is a vector, the other
     two are scalars.

 4)  Compiler error is pretty clear for once: it does not understand the
     division, and you only have one so look there.


Here is a minimal working example:

library(Rcpp)
foo<-cppFunction('NumericVector foo(NumericVector q, double shape1, double shape2){
  return pbeta(q, shape1, shape2);                                                                                                                                                                                }')  

for which I get

R> source('/tmp/foo.R')
R> foo(seq(0.1, 0.5, by=0.1), 2, 3)
[1] 0.0523 0.1808 0.3483 0.5248 0.6875

Dirk

-- 
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com



[Rd] =?utf-8?q?invalid_operands_of_types_=E2=80=98SEXPREC*?= =?utf-8?b?4oCZIGFuIGQg4oCYUl9sZW5fdOKAmSB0byBiaW5hcnkg4oCYb3BlcmF0?= =?utf-8?b?b3Iv4oCZIHdpdAloIFJjcHAu?=
Dirk Eddelbuettel