[Rcpp-devel] RcppArmadillo error

Romain Francois romain at r-enthusiasts.com
Tue Mar 30 08:15:05 CEST 2010


Hi,

If you want to compile the code that is here 
http://dirk.eddelbuettel.com/code/rcpp.armadillo.html directly from R 
CMD SHLIB, you can do this:

romain at naxos /tmp $ export PKG_CXXFLAGS=`Rscript -e 
"RcppArmadillo:::CxxFlags()"`
romain at naxos /tmp $ export PKG_LIBS=`Rscript -e "RcppArmadillo:::LdFlags()"`
romain at naxos /tmp $ R CMD SHLIB armaex.cpp

I would however strongly recommend you to have this in a package.

Romain

Le 26/03/10 19:00, Abhisek a écrit :
> Hi Dirk,
>
> I was referring to this page:
> http://dirk.eddelbuettel.com/code/rcpp.armadillo.html
> i was trying to run the code there.
>
> here is my understanding so far (im new to linux and c++ so i apologize
> for seeming rather slow!):
> 1.  The Rcpp package helps C++ and R recognize each others stuff (like
> variables).
>
> 2. The RcppArmadillo package extends this functionality to objects used
> in armadillo (such as matrices and vectors e.g. colvec).
>
> 3. In FastLM, armadillo is being included but not RcppArmadillo.  but
> that is ok because there is a loop in there which converts an vector as
> defined in armadillo to one which Rcpp recognizes.  And it is this
> vector which which gets passed back to R through the Rcpp interface.
> also, it uses cfunction which is different from what im doing here as i
> think you mentioned earlier (it worked by the way!)
>
> what i tried to do was as follows:
> a) to run the code as in the link above and include Rcpp and
> RcppArmadillo and I was getting the errors as described in my initial post.
> b) then i tried the same code but only including Rcpp and armadillo.
>
> if my reasoning above is correct, part (b) should not run as Rcpp would
> not recognize stuff like arma::colvec.  but, i get the exact same error
> as above!
>
> so that suggests, that while compiling the code, the compiler is not
> even getting to the point in procedure b when it should encounters an
> type it doesnt recognize.  which means that somehow, armadillo is giving
> problems.  but that is as far as i can understand.  either that or my
> understanding is way off.
>
> appreciate your patience and help!
> abhisek
>
>
>
> On Fri, Mar 26, 2010 at 4:20 PM, Dirk Eddelbuettel <edd at debian.org
> <mailto:edd at debian.org>> wrote:
>
>
>     On 26 March 2010 at 15:32, Abhisek wrote:
>     | Hi Dirk,
>     |
>     | Just so that I understand.  I copied the code in the RcppArmadillo
>     section
>     | on your website and pasted and saved it.
>
>     What code? What page?
>
>     | Are you saying I should change
>     | #include <RcppArmadillo> to #include <Rcpp> and #include <armadillo> ?
>
>     No that is not what I said.  I said
>
>         You can't just look at FastLM() and think your code will run
>     like it.
>         RcppArmadillo __does not export its classes__.  It is an
>     implementation
>         reference -- it gives you guidance as to how to implement C++
>     packages of
>         your own against other libraries.
>
>         If you "just" want to use Armadillo and have Rcpp help you, look
>     at the
>         installed example 'FastLM' in the Rcpp package.  In other words
>     ignore
>         RcppArmadillo for now.
>
>     So look at /usr/local/lib/Rcpp/examples/FastLM/ and the files there.
>       Run
>
>         fastLMviaArmadillo.r
>
>     and look at it. That should work.
>
>     You can also look at the _entire RcppArmadillo package_ and see how the
>     pieces fit together, including src/Makevars.
>
>     But don't just take semi-random shortcuts and expect that to work. If we
>     could make it any simpler, we would.  There is a reason RcppArmadilli is
>     package and not just a file.
>
>     Dirk
>
>     | best,
>     | abhisek
>     |
>     | On Fri, Mar 26, 2010 at 1:40 PM, Dirk Eddelbuettel <edd at debian.org
>     <mailto:edd at debian.org>> wrote:
>     |
>     | >
>     | > Hi Abhisek,
>     | >
>     | > On 26 March 2010 at 12:28, Abhisek wrote:
>     | > | I downloaded the stuff just last friday so it should be the latest
>     | > version
>     | > | of Rcpp as well as Armadillo.  I used install.packages() for
>     Rcpp and
>     | > | RcppArmadillo.  Armadillo is 0.9.4.  Im using xubuntu karmic
>     koala.
>     | >
>     | > Ok, that is all good.  And if RcppArmadillo installed you have
>     proper
>     | > libraries, Armadillo included.
>     | >
>     | > I think part of your problem is a misunderstanding of an issue
>     we may not
>     | > have made particularly clear:  You can't just look at FastLM()
>     and think
>     | > your code will run like it.  RcppArmadillo __does not export its
>     classes__.
>     | > It is an implementation reference -- it gives you guidance as to
>     how to
>     | > implement C++ packages of your own against other libraries.
>     | >
>     | > If you "just" want to use Armadillo and have Rcpp help you, look
>     at the
>     | > installed example 'FastLM' in the Rcpp package.  In other words
>     ignore
>     | > RcppArmadillo for now.
>     | >
>     | > The example (in 0.7.10) uses an idiom we no longer like and I am
>     about to
>     | > change that for an upcoming 0.7.11 release, but it should works
>     as is and
>     | > just use inline -- so no messing with makefile etc.
>     | >
>     | > Try that and see how it goes and keep us posted.
>     | >
>     | > Cheers, Dirk
>     | >
>     | >
>     | > | i also had some problem using Armadillo which I posted on the
>     Armadillo
>     | > | discussion board.  Conrad got back to me.  Here is the discussion:
>     | > | https://sourceforge.net/apps/phpbb/arma/viewtopic.php?f=1&t=4
>     <https://sourceforge.net/apps/phpbb/arma/viewtopic.php?f=1&t=4>
>     | > |
>     | > | so it may be that armadillo is the problem but im really not sure.
>     | > |
>     | > | Many thanks
>     | > | Abhisek
>     | > |
>     | > | On Fri, Mar 26, 2010 at 12:17 PM, Dirk Eddelbuettel
>     <edd at debian.org <mailto:edd at debian.org>>
>     | > wrote:
>     | > |
>     | > | >
>     | > | > (resending, this time to list I omitted last time, sorry.
>     --Dirk)
>     | > | >
>     | > | > On 26 March 2010 at 11:10, Abhisek wrote:
>     | > | > | Hi,
>     | > | > |
>     | > | > | Ive been trying to make RcppArmadillo work using the
>     example file
>     | > | > (fastLM).
>     | > | > | I copied and pasted the code and saved it as
>     RcppArmadilloEg.cpp (not
>     | > to
>     | > | > use
>     | > | > | fastLM but to figure out how to work RcppArmadillo).  Then
>     i tried
>     | > using
>     | > | > the
>     | > | > | command R CMD SHLIB RcppArmadilloEg.cpp but an error came
>     up saying
>     | > that
>     | > | > | RcppArmadillo.h not found.
>     | > | > |
>     | > | > | So i tried doing a symbolic link from /usr/local/include
>     to the
>     | > directory
>     | > | > | where RcppArmadillo.h and RcppArmadilloDefines.h is
>     stored.  I also
>     | > did a
>     | > | > | symbolic link analogously for RcppArmadillo.so.  When i
>     ran R CMD
>     | > SHLIB
>     | > | > | again I got the following error:
>     | > | > |
>     | > | > | abhisek at shieks:~/Desktop/Personal/Test$ R CMD SHLIB
>     | > RcppArmadilloEg.cpp
>     | > | > | g++ -I/usr/share/R/include
>     | > | > | -I/home/abhisek/R/i486-pc-linux-gnu-library/2.10/Rcpp/lib
>     -fpic  -g
>     | > -O2
>     | > | > -c
>     | > | > | RcppArmadilloEg.cpp -o RcppArmadilloEg.o
>     | > | >
>     | > | > So far so good:  one -I for R as usual, one for Rcpp.
>     | > | >
>     | > | > | In file included from
>     | > | > |
>     | >
>     /home/abhisek/R/i486-pc-linux-gnu-library/2.10/Rcpp/lib/RcppCommon.h:215,
>     | > | > |                  from
>     | > | > |
>     /home/abhisek/R/i486-pc-linux-gnu-library/2.10/Rcpp/lib/Rcpp.h:28,
>     | > | > |                  from RcppArmadilloEg.cpp:1:
>     | > | > |
>     | > | >
>     | >
>     /home/abhisek/R/i486-pc-linux-gnu-library/2.10/Rcpp/lib/Rcpp/internal/wrap.h:
>     | > | > | In function ‘SEXPREC*
>     | > | > Rcpp::internal::wrap_dispatch_unknown_iterable(const
>     | > | > | T&, Rcpp::traits::false_type) [with T = arma::Col<double>]’:
>     | > | > |
>     | > | >
>     | >
>     /home/abhisek/R/i486-pc-linux-gnu-library/2.10/Rcpp/lib/Rcpp/internal/wrap.h:491:
>     | > | > | instantiated from ‘SEXPREC*
>     | > Rcpp::internal::wrap_dispatch_unknown(const
>     | > | > T&,
>     | > | > | Rcpp::traits::false_type) [with T = arma::Col<double>]’
>     | > | > |
>     | > | >
>     | >
>     /home/abhisek/R/i486-pc-linux-gnu-library/2.10/Rcpp/lib/Rcpp/internal/wrap.h:509:
>     | > | > | instantiated from ‘SEXPREC*
>     | > | > | Rcpp::internal::wrap_dispatch_unknown_importable(const T&,
>     | > | > | Rcpp::traits::false_type) [with T = arma::Col<double>]’
>     | > | > |
>     | > | >
>     | >
>     /home/abhisek/R/i486-pc-linux-gnu-library/2.10/Rcpp/lib/Rcpp/internal/wrap.h:526:
>     | > | > | instantiated from ‘SEXPREC*
>     Rcpp::internal::wrap_dispatch(const T&,
>     | > | > | Rcpp::traits::wrap_type_unknown_tag) [with T =
>     arma::Col<double>]’
>     | > | > |
>     | > | >
>     | >
>     /home/abhisek/R/i486-pc-linux-gnu-library/2.10/Rcpp/lib/Rcpp/internal/wrap.h:541:
>     | > | > | instantiated from ‘SEXPREC* Rcpp::wrap(const T&) [with T =
>     | > | > | arma::Col<double>]’
>     | > | > |
>     | >
>     /home/abhisek/R/i486-pc-linux-gnu-library/2.10/Rcpp/lib/Rcpp/Named.h:54:
>     | > | > | instantiated from ‘Rcpp::Named::Named(const std::string&,
>     const T&)
>     | > [with
>     | > | > T
>     | > | > | = arma::colvec]’
>     | > | > | RcppArmadilloEg.cpp:19:   instantiated from here
>     | > | > |
>     | > | >
>     | >
>     /home/abhisek/R/i486-pc-linux-gnu-library/2.10/Rcpp/lib/Rcpp/internal/wrap.h:394:
>     | > | > | error: cannot convert ‘const arma::Col<double>’ to
>     ‘SEXPREC*’ in
>     | > | > | initialization
>     | > | > | make: *** [RcppArmadilloEg.o] Error 1
>     | > | > |
>     | > | > |
>     | > | > | could someone provide some advice?
>     | > | >
>     | > | > Which Rcpp version do you have installed?
>     | > | >
>     | > | > Which Armadillo version do you have installed?
>     | > | >
>     | > | > I have not tried the free-floating direct compile you try
>     here.  Maybe
>     | > the
>     | > | > defines for RcppArmadillo that we use are missing here --
>     hard to say.
>     | > | >
>     | > | > Could you try to create your own little package but copying the
>     | > | > RcppArmadillo
>     | > | > files, changes DESCRIPTION to what you do and changes the
>     FastLM code
>     | > in
>     | > | > C++
>     | > | > and R?
>     | > | >
>     | > | > Dirk
>     | > | >
>     | > | > --
>     | > | >  Registration is open for the 2nd International conference R
>     / Finance
>     | > 2010
>     | > | >  See http://www.RinFinance.com for details, and see you in
>     Chicago in
>     | > | > April!
>     | > | >
>     | >
>     | > --
>     | >   Registration is open for the 2nd International conference R /
>     Finance
>     | > 2010
>     | >  See http://www.RinFinance.com for details, and see you in
>     Chicago in
>     | > April!
>     | >
>
>     --
>       Registration is open for the 2nd International conference R /
>     Finance 2010
>       See http://www.RinFinance.com for details, and see you in Chicago
>     in April!
>
>
>
>
> _______________________________________________
> Rcpp-devel mailing list
> Rcpp-devel at 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://tr.im/OIXN : raster images and RImageJ
|- http://tr.im/OcQe : Rcpp 0.7.7
`- http://tr.im/O1wO : highlight 0.1-5



More information about the Rcpp-devel mailing list