[Rcpp-devel] RcppArmadillo error
Dirk Eddelbuettel
edd at debian.org
Thu Apr 1 16:58:36 CEST 2010
On 1 April 2010 at 09:57, Romain Francois wrote:
| You need Rcpp 0.7.11 (where create was introduced)
(And we mentioned that need for 0.7.11 several times)
| 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
I would not recommend that as the code can change and introduce other issue.
Releases are at CRAN, and at my Rcpp page.
Dirk
| 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
|
| _______________________________________________
| 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
--
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!
More information about the Rcpp-devel
mailing list