Thank you, this makes more sense now. I do like the succinct, "show-off" style; it seems to convey the meaning better.<br><br><div class="gmail_quote">On Fri, Feb 10, 2012 at 4:47 PM, Douglas Bates <span dir="ltr"><<a href="mailto:bates@stat.wisc.edu">bates@stat.wisc.edu</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Fri, Feb 10, 2012 at 3:30 PM, Dirk Eddelbuettel <<a href="mailto:edd@debian.org">edd@debian.org</a>> wrote:<br>


><br>
> On 10 February 2012 at 15:05, Douglas Bates wrote:<br>
> | Or if you want to show off you could collapse it to<br>
> |<br>
> | > src <- "<br>
> | +   NumericMatrix tmpMatrix(as<SEXP>(List(L)[0]));<br>
> | +   return wrap(tmpMatrix.ncol());<br>
> | + "<br>
> | > f <- cxxfunction(signature(L="list"), src, plugin = "Rcpp" )<br>
> | > f(list(matrix(1:9,3,3)))<br>
> | [1] 3<br>
><br>
> Nice. The as<> cast is a good idea, it may even work with as<NumericMatrix><br>
> which would avoid the ugly SEXP in user code ...<br>
<br>
</div>IIRC it doesn't work because you need to "de-proxy" the returned<br>
element from the list before you can pass it to some instantiation of<br>
"as".<br>
<br>
By the way, this use of the as<SEXP> actually has a practical use.  I<br>
have a class C++ glmFamily which corresponds to the R "family" class<br>
for glm and related functions.  It is a good practice to initialize<br>
class data members before the body of the constructor function and it<br>
took me a while to work out<br>
<br>
    class glmFamily {<br>
    protected:<br>
        std::string    d_family, d_link; /**< as in the R glm family */<br>
                                //@{ R functions from the family, as a fall-back<br>
        Rcpp::Function d_devRes, d_linkfun, d_linkinv, d_muEta, d_variance, d_aic;<br>
                                //@}<br>
        Rcpp::Environment d_rho;<br>
    public:<br>
        glmFamily(Rcpp::List);<br>
...<br>
    };<br>
<br>
    glmFamily::glmFamily(List ll)<br>
        : d_family(  as<std::string>(as<SEXP>(ll["family"]))),<br>
          d_link(    as<std::string>(as<SEXP>(ll["link"]))),<br>
          d_devRes(  as<SEXP>(ll["dev.resids"])),<br>
          d_linkfun( as<SEXP>(ll["linkfun"])),<br>
          d_linkinv( as<SEXP>(ll["linkinv"])),<br>
          d_muEta(   as<SEXP>(ll["mu.eta"])),<br>
          d_variance(as<SEXP>(ll["variance"])),<br>
          d_aic(     as<SEXP>(ll["aic"])),<br>
          d_rho(     d_devRes.environment()) {<br>
        if (!ll.inherits("family"))<br>
            throw std::runtime_error("glmFamily requires a list of (S3) class<br>
\"family\"");<br>
        if (!lnks.count("identity")) initMaps();<br>
    }<br>
</blockquote></div><br><br clear="all"><br>-- <br>Sameer Soi<br><br>w: 215.746.2683 | c: 814.241.8585<br>