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