[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