[Rcpp-devel] RcppArmadillo error

Romain Francois romain at r-enthusiasts.com
Thu Apr 1 09:57:32 CEST 2010


You need Rcpp 0.7.11 (where create was introduced)

It has been pushed to cran, but somehow does not appear yet. If you are 
in a hurry, you can get it from r-forge:

$ svn checkout svn://svn.r-forge.r-project.org/svnroot/rcpp/pkg/Rcpp
$ R CMD INSTALL Rcpp

Le 01/04/10 09:42, Abhisek a écrit :
> Hi Romain,
>
> I tried the commands you gave and I get the following error:
>
> RcppArmadilloEg.cpp: In function ‘SEXPREC* fastLm(SEXPREC*, SEXPREC*)’:
> RcppArmadilloEg.cpp:19: error: ‘create’ is not a member of ‘Rcpp::List’
> make: *** [RcppArmadilloEg.o] Error 1
>
> is there some kind of update I need to make?
>
> almost there!
> abhisek
>
> On Tue, Mar 30, 2010 at 3:12 PM, Romain Francois
> <romain at r-enthusiasts.com <mailto:romain at r-enthusiasts.com>> wrote:
>
>     Le 30/03/10 15:36, Douglas Bates a écrit :
>
>         On Tue, Mar 30, 2010 at 1:15 AM, Romain Francois
>         <romain at r-enthusiasts.com <mailto:romain at r-enthusiasts.com>>  wrote:
>
>             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
>
>
>         The way that RcppArmadillo:::LdFlags() is currently defined
>         there is a
>         possibility of getting different Lapack and BLAS libraries when
>         using
>         R or calls to RcppArmadillo.  R uses the libraries defined by the
>         macros LAPACK_LIBS, BLAS_LIBS and FLIBS in the file
>
>         file.path(R.home("etc"), "Makeconf")  # evaluate this in R
>
>         It is not certain that those will be the same as the libraries
>         used by
>         Armadillo.  If they are not shared objects you run the risk of
>         getting
>         two copies of Lapack, etc.  and possibly different BLAS, leading to
>         different performance characteristics and perhaps different results.
>
>
>     Hmmm. Interesting. I did not think of that problem.
>
>     On my machine, I have :
>
>     Rscript -e "RcppArmadillo:::LdFlags()"
>     /Library/Frameworks/R.framework/Resources/library/Rcpp/lib/x86_64/libRcpp.a
>     -L/usr/lib -larmadillo
>
>     so linking against Rcpp "user" library and armadillo... but when I
>     manually set PKG_LIBS to just Rcpp user library, it still works, so
>     we actually do not need to link against armadillo library. armadillo
>     itself does not __need__ to get compiled into a library because it
>     is all templates.
>
>
>             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>
>                 <mailto: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>
>                 <mailto: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>
>                 <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><mailto: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?
>                      |>  |>


-- 
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