[Rcpp-devel] Manipulating exposed C++ classes in R

Mark.Palmer at csiro.au Mark.Palmer at csiro.au
Tue Jan 25 03:08:13 CET 2011


Hi,

I hope I don't make too many naïve statements and assumptions in this post. Essentially what ive done is expose a C++ class to R using Rcpp modules. Within my C++ code I create an object of this class and pass it back to R, where its placed in a list. I then, at a later stage within R, want to get access to the elements in this list, whereupon I get the error message "$ operator is invalid for atomic vectors". I'm running R2.12.1 and presumably the latest versions of the relevant packages, Rcpp, and inline.

In more detail, the following code in R creates an element in the list, in a function that is called by 'lapply'

tape  <- new(adFun)
tape$CreateTape(coefs, Datas)
tape$ForwardR(coefs)
result <- tape
return(result)

which returns to a function', and the end result is a list  (Nllh.Check), within a function, created by

Nllh.Check <<- CheckGEVFit(AllData, NCovarsW, NCovarsWgev, npmu, npsc, npsh, Order, Theta.24, Ccoefs,
                              Nmodel, shlink = SHLINK, Which = WhichMH, adFun)

Because of the "<<-", I actually have saved Nllh.Check, and I can look at that from the R prompt,

> str(Nllh.Check)
List of 580
 $ :Formal class 'Rcpp_adFun' [package ".GlobalEnv"] with 1 slots
  .. ..@ .xData:<environment: 07c7bac8>
 $ :Formal class 'Rcpp_adFun' [package ".GlobalEnv"] with 1 slots
  .. ..@ .xData:<environment: 087055e8>
 $ :Formal class 'Rcpp_adFun' [package ".GlobalEnv"] with 1 slots
  .. ..@ .xData:<environment: 086a236c>   etc

And

> Nllh.Check[[1]]
C++ object <013CBD38> of class 'adFun' <01689C50>

Or calling one of the functions of the C++ class

> Nllh.Check[[400]]$TapeProperties()
Summary of tape
Domain dimension 6
Range dimension 1
0-th component of range space corresponds to a parameter in the operation sequence 0
Number of variables in operation sequence + phantom 6754
Number of parameters in operation sequence  135
Number of operations 5429
Total number of operator arguments in operator sequence 10314
Total characters used in PrintFor 0
Number of VecAD vectors 0
Amount of memory required to store the operation sequence 64052

Which to me indicates that this object is ok, the list ive constructed is what I think it should be etc.  However if I try to do something within the function that created the list  like

Nllh.Check <<- CheckGEVFit(AllData, NCovarsW, NCovarsWgev, npmu, npsc, npsh, Order, Theta.24, Ccoefs,
                              Nmodel, shlink = SHLINK, Which = WhichMH, adFun)
Nllh.Check[[400]]$TapeProperties()

I get the error message
Error in Nllh.Check[[400]]$TapeProperties :
  $ operator is invalid for atomic vectors

So, to me the question is, is what I am trying to do possible, or am I going about it the wrong way, or lastly is it a bug?

I hope this is enough detail, and apologise if its not. Its not easy to produce a small illustrative example, because the above relies on an external C++ package .

Thanks

Mark Palmer
Senior Statistician
CSIRO Mathematics, Informatics and Statistics

Phone: +61 8 9333 6293 | Fax: +61 8 9333 6121 | Mobile: 0427502353
Mark.Palmer at csiro.au<mailto:Mark.Palmer at csiro.au> | www.csiro.au | www.csiro.au/cmis<http://www.csiro.au/cmis>
Address: Private bag 5, Wembley, WA 6913, Australia

PLEASE NOTE
The information contained in this email may be confidential or privileged. Any unauthorised use or disclosure is prohibited. If you have received this email in error, please delete it immediately and notify the sender by return email. Thank you. To the extent permitted by law, CSIRO does not represent, warrant and/or guarantee that the integrity of this communication has been maintained or that the communication is free of errors, virus, interception or interference.

Please consider the environment before printing this email.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20110125/b160bf7b/attachment-0001.htm>


More information about the Rcpp-devel mailing list