[Rcpp-commits] r3258 - pkg/RcppEigen/vignette
noreply at r-forge.r-project.org
noreply at r-forge.r-project.org
Tue Nov 1 16:56:02 CET 2011
Author: dmbates
Date: 2011-11-01 16:56:02 +0100 (Tue, 01 Nov 2011)
New Revision: 3258
Removed:
pkg/RcppEigen/vignette/Rcpp.bib
pkg/RcppEigen/vignette/RcppEigen-Intro.Rnw
pkg/RcppEigen/vignette/RcppEigen-Intro.pdf
Log:
Get the name right
Deleted: pkg/RcppEigen/vignette/Rcpp.bib
===================================================================
--- pkg/RcppEigen/vignette/Rcpp.bib 2011-11-01 15:52:57 UTC (rev 3257)
+++ pkg/RcppEigen/vignette/Rcpp.bib 2011-11-01 15:56:02 UTC (rev 3258)
@@ -1,481 +0,0 @@
- at String{CRAN = "http://CRAN.R-Project.org/" }
- at String{manuals = CRAN # "doc/manuals/" }
- at String{RCoreTeam = "{R Development Core Team}" }
- at String{RFoundation = "R Foundation for Statistical Computing" }
- at String{R-Forge = "http://R-Forge.R-Project.org/" }
-
- at manual{Abrahams+Grosse-Kunstleve:2003:Boost.Python,
- author = { David Abrahams and Ralf W. Grosse-Kunstleve },
- organization = "Boost Consulting",
- title = "Building Hybrid Systems with Boost.Python",
- year = 2003,
- url = "http://www.boostpro.com/writing/bpl.pdf"
-}
-
- at Book{Abrahams+Gurtovoy:2004:TemplateMetaprogramming,
- author = {David Abrahams and Aleksey Gurtovoy},
- title = {{C++} {T}emplate {M}etaprogramming: Concepts, Tools
- and Techniques from {B}oost and Beyond},
- publisher = {Addison-Wesley},
- year = 2004,
- address = {Boston}
-}
-
- at Manual{Armstrong:2009:RAbstraction,
- title = {{RAbstraction}: {C++} abstraction for {R} objects},
- author = {Whit Armstrong},
- year = 2009,
- note = {Code repository last updated 2009-07-22.},
- url = {http://github.com/armstrtw/rabstraction}
-}
-
- at Manual{Armstrong:2009:RObjects,
- title = {{RObjects}: {C++} wrapper for R objects (a better
- implementation of {RAbstraction}},
- author = {Whit Armstrong},
- year = 2009,
- note = {Code repository last updated 2009-11-28.},
- url = {http://github.com/armstrtw/RObjects}
-}
-
- at InProceedings{Bates+DebRoy:2001:C++Classes,
- author = {Douglas M. Bates and Saikat DebRoy},
- title = {{C++} Classes for {R} Objects},
- booktitle = {Proceedings of the 2nd International Workshop on Distributed
- Statistical Computing, March 15--17, 2001, Technische
- Universit\"at Wien, Vienna, Austria},
- editor = {Kurt Hornik and Friedrich Leisch},
- year = {2001},
- url = {http://www.ci.tuwien.ac.at/Conferences/DSC-2001/Proceedings/},
- note = {ISSN 1609-395X}
-}
-
-
- at Misc{Brokken:2011:Cpp,
- author = {Frank B. Brokken},
- title = {C++ Annotations},
- howpublished = {Electronic book, University of Groningen},
- year = 2011,
- url = {http://www.icce.rug.nl/documents/cplusplus/}
-}
-
- at Book{Chambers:2008:SoDA,
- author = {John M. Chambers},
- title = {Software for Data Analysis: Programming with {R}},
- publisher = {Springer-Verlag},
- year = 2008,
- series = {Statistics and Computing},
- address = {Heidelberg},
- note = {{ISBN} 978-0-387-75935-7}
-}
-
- at Manual{CRAN:RInside,
- title = {RInside: C++ classes to embed R in C++ applications},
- author = {Dirk Eddelbuettel and Romain Fran\c{c}ois},
- year = 2010,
- note = {R package version 0.2.3},
- url = CRAN # "package=RInside"
-}
-
- at Manual{CRAN:RProtoBuf,
- title = {RProtoBuf: R Interface to the Protocol Buffers API},
- author = {Romain Fran\c{c}ois and Dirk Eddelbuettel},
- year = 2011,
- note = {R package version 0.2.3},
- url = CRAN # "package=RProtoBuf"
-}
-
- at Manual{CRAN:RQuantLib,
- title = {RQuantLib: {R} interface to the {QuantLib} library},
- author = {Dirk Eddelbuettel and Khanh Nguyen},
- year = 2011,
- note = {R package version 0.3.6},
- url = CRAN # "package=RQuantLib"
-}
-
- at Article{JSS:Rcpp,
- title = {{Rcpp}: Seamless {R} and {C++} Integration},
- author = {Dirk Eddelbuettel and Romain Fran\c{c}ois},
- journal = {Journal of Statistical Software},
- year = 2011,
- volume = 40,
- number = 8,
- pages = {1--18},
- url = {http://www.jstatsoft.org/v40/i08/},
-}
-
- at Manual{CRAN:Rcpp,
- title = {{Rcpp}: Seamless {R} and {C++} Integration},
- author = {Dirk Eddelbuettel and Romain Fran\c{c}ois},
- year = 2011,
- note = {R package version 0.9.4},
- url = CRAN # "package=Rcpp"
-}
-
- at Manual{CRAN:RcppArmadillo,
- title = {RcppArmadillo: Rcpp integration for Armadillo
- templated linear algebra library},
- author = {Romain Fran\c{c}ois and Dirk Eddelbuettel and
- Douglas Bates},
- year = 2011,
- note = {R package version 0.2.18},
- url = CRAN # "package=RcppArmadillo"
-}
-
- at Manual{CRAN:RcppClassic,
- title = {RcppClassic: Deprecated 'classic' Rcpp API},
- author = {Dirk Eddelbuettel and Romain Fran\c{c}ois},
- year = 2011,
- note = {R package version 0.9.1},
- url = CRAN # "package=RcppClassic"
-}
-
- at Manual{CRAN:RcppDE,
- title = {RcppDE: Global optimization by differential evolution in C++},
- author = {Dirk Eddelbuettel},
- year = 2010,
- note = {R package version 0.1.0},
- url = CRAN # "package=RcppDE"
-}
-
- at Manual{CRAN:RcppExamples,
- title = {RcppExamples: Examples using {Rcpp} to interface {R}
- and {C++}},
- author = {Dirk Eddelbuettel and Romain Fran\c{c}ois},
- year = 2010,
- note = {R package version 0.1.2},
- url = CRAN # "package=RcppExamples"
-}
-
- at Manual{CRAN:RcppGSL,
- title = {RcppGSL: Rcpp integration for GNU GSL vectors and matrices},
- author = {Romain Fran\c{c}ois and Dirk Eddelbuettel},
- year = 2011,
- note = {R package version 0.1.1},
- url = CRAN # "package=RcppGSL"
-}
-
- at Manual{CRAN:Rserve,
- title = {Rserve: Binary R server},
- author = {Simon Urbanek},
- year = 2011,
- note = {R package version 0.6-3},
- url = CRAN # "package=Rserve"
-}
-
- at Manual{CRAN:cxxPack,
- title = {cxxpack: {R/C++} Tools for Literate Statistical
- Practice},
- author = {Dominick Samperi},
- year = 2010,
- note = {R package version 7.0.6},
- url = CRAN # "package=cxxPack"
-}
-
- at Manual{CRAN:highlight,
- title = {highlight: Syntax highlighter},
- author = {Romain Fran\c{c}ois},
- year = 2010,
- note = {R package version 0.2-5},
- url = CRAN # "package=highlight"
-}
-
- at Manual{CRAN:inline,
- title = {inline: Inline C, C++, Fortran function calls from
- R},
- author = {Oleg Sklyar and Duncan Murdoch and Mike Smith and
- Dirk Eddelbuettel and Romain Fran\c{c}ois},
- year = 2010,
- note = {R package version 0.3.8},
- url = CRAN # "package=inline"
-}
-
- at Manual{CRAN:Matrix,
- title = {Matrix: Sparse and Dense Matrix Classes and Methods},
- author = {Douglas Bates and Martin Maechler},
- year = 2011,
- note = {R package version 1.0-2},
- url = CRAN # "package=Matrix"
-}
-
- at Manual{CRAN:minqa,
- title = {minqa: Derivative-free optimization algorithms by
- quadratic approximation},
- author = {Douglas Bates and Katharine M. Mullen and John
- C. Nash and Ravi Varadhan},
- year = 2011,
- note = {R package version 1.1.15},
- url = CRAN # "package=minqa"
-}
-
- at Manual{CRAN:rbenchmark,
- title = {rbenchmark: Benchmarking routine for R},
- author = {Wacek Kusnierczyk},
- year = 2010,
- note = {R package version 0.3},
- url = CRAN # "package=rbenchmark"
-}
-
-; see http://eigen.tuxfamily.org/index.php?title=BibTeX
-; replaced 'howpublished' with 'url' and updated year to 2011
- at MISC{Eigen:Web,
- author = {Ga\"{e}l Guennebaud and Beno\^{i}t Jacob and others},
- title = {Eigen v3},
- year = 2011,
- url = {http://eigen.tuxfamily.org},
-}
-
- at Article{Gropp+Lusk+Doss+Skjellum:1996:MPI,
- author = {William Gropp and Ewing Lusk and Nathan Doss and Anthony Skjellum},
- title = {A high-performance, portable implementation of the {MPI} message passing interface standard},
- journal = {Parallel Computing},
- year = 1996,
- url = {http://dx.doi.org/10.1016/0167-8191(96)00024-5},
- volume = 22,
- number = 6,
- pages = {789--828}
-}
-
- at Book{Gropp+Lusk+Skjellum:1999:MPI,
- author = {William Gropp and Ewing Lusk and Anthony Skjellum},
- title = {Using {MPI}: Portable Parallel Programming with the Message Passing Interface},
- publisher = {MIT Press},
- year = 1999,
- series = {Scientific and Engineering Computation Series},
- edition = {2nd},
- month = {November},
- note = {{ISBN} 978-0-262-57132-6}}
-
- at Manual{GSL,
- title = {{GNU} {S}cientific {L}ibrary {R}eference {M}anual},
- author = {Mark Galassi and Jim Davies and James Theiler and Brian Gough and Gerard Jungman and Patrick Alken and Michael Booth and Fabrice Rossi},
- year = {2010},
- edition = {3rd},
- note = {Version 1.14. {ISBN} 0954612078},
- url = {http://www.gnu.org/software/gsl}
-}
-
- at Unpublished{Java+Gaile+Manly:2007:RCpp,
- author = {James J. Java and Daniel P. Gaile and Kenneth
- E. Manly},
- title = {{R/Cpp}: Interface Classes to Simplify Using {R}
- Objects in {C++} Extensions},
- note = {Unpublished manuscript, University at Buffalo},
- url =
- {http://sphhp.buffalo.edu/biostat/research/techreports/UB_Biostatistics_TR0702.pdf},
- month = {July},
- year = 2007
-}
-
- at InProceedings{Leisch:2008:Tutorial,
- author = {Friedrich Leisch},
- title = {Tutorial on {C}reating \proglang{R} {P}ackages},
- booktitle = {COMPSTAT 2008 -- Proceedings in Computational
- Statistics},
- year = 2008,
- editor = {Paula Brito},
- address = {Heidelberg},
- publisher = {Physica Verlag},
- url = CRAN # "doc/contrib/Leisch-CreatingPackages.pdf"
-}
-
- at Manual{Liang:2008:rcppbind,
- title = {rcppbind: {A} template library for R/C++ developers},
- author = {Gang Liang},
- year = 2008,
- note = {R package version 1.0},
- url = R-Forge # "projects/rcppbind"
-}
-
- at Book{Lippman+Lajoie+Moo:2005:Cpp_Primer,
- author = {Stanley B. Lippman and Jos\'{e}e Lajoie and Barbara E. Moo},
- title = {The C++ Primer},
- publisher = {Addison-Wesley},
- address = {Boston},
- year = 2005,
- edition = {4th}
-}
-
- at book{Meyers:1995:MoreEffectiveC++,
- author = {Scott Meyers},
- title = {More Effective C++: 35 New Ways to Improve Your
- Programs and Designs},
- year = 1995,
- note = {{ISBN} 020163371X},
- publisher = {Addison-Wesley},
- address = {Boston}
-}
-
- at book{Meyers:2001:EffectiveSTL,
- author = {Scott Meyers},
- title = {Effective STL: 50 specific ways to improve your use
- of the standard template library},
- year = 2001,
- note = {{ISBN} 0-201-74962-9},
- publisher = {Addison-Wesley},
- address = {Essex}
-}
-
- at book{Meyers:2005:EffectiveC++,
- author = {Scott Meyers},
- title = {Effective C++: 55 Specific Ways to Improve Your
- Programs and Designs},
- year = 2005,
- note = {{ISBN} 978-0321334879},
- publisher = {Addison-Wesley},
- address = {Boston},
- edition = {3rd},
-}
-
- at Book{Plauger+Et+Al:2000:STL,
- author = {P.J. Plauger and Alexander Stepanov and Meng Lee and
- David R. Musser},
- title = {The {C++} Standard Template Library},
- publisher = {Prentice Hall PTR},
- year = 2000,
- note = {{ISBN} 978-0134376332},
-}
-
- at manual{R:Administration,
- author = RCoreTeam,
- organization = RFoundation,
- address = {Vienna, Austria},
- year = 2010,
- title = "R Installation and Administration",
- note = {{ISBN} 3-900051-09-7},
- url = manuals # "R-admin.html"
-}
-
- at manual{R:Extensions,
- author = RCoreTeam,
- organization = RFoundation,
- address = {Vienna, Austria},
- year = 2011,
- title = "Writing R extensions",
- note = {{ISBN} 3-900051-11-9},
- url = manuals # "R-exts.html"
-}
-
- at manual{R:Internals,
- author = RCoreTeam,
- organization = RFoundation,
- address = {Vienna, Austria},
- year = 2011,
- title = "R internals",
- note = {{ISBN} 3-900051-14-3},
- url = manuals # "R-ints.html"
-}
-
- at manual{R:Main,
- title = {R: A Language and Environment for Statistical
- Computing},
- author = RCoreTeam,
- organization = RFoundation,
- address = {Vienna, Austria},
- year = 2011,
- note = {{ISBN} 3-900051-07-0},
- url = {http://www.R-project.org/},
-}
-
- at manual{R:Language,
- author = RCoreTeam,
- organization = RFoundation,
- address = {Vienna, Austria},
- year = 2011,
- title = "R language",
- note = {{ISBN} 3-900051-13-5},
- url = manuals # "R-lang.html"
-}
-
- at InProceedings{Runnalls:2009:CXXR,
- author = {Andrew Runnalls},
- title = {Aspects of {CXXR} internals},
- booktitle = {Directions in Statistical Computing},
- address = {University of Copenhagen, Denmark},
- year = 2009
-}
-
- at Manual{Samperi:2009:RcppTemplate,
- title = {RcppTemplate: Rcpp {R/C++} Object Mapping Library
- and Package Template},
- author = {Dominick Samperi},
- year = 2009,
- note = {(Archived) R package version 6.1},
- url = CRAN # "/src/contrib/Archive/RcppTemplate"
-}
-
- at TechReport{Sanderson:2010:Armadillo,
- author = {Conrad Sanderson},
- title = {{Armadillo}: {An} open source {C++} Algebra Library
- for Fast Prototyping and Computationally Intensive
- Experiments },
- institution = {{NICTA}},
- year = 2010,
- url = "http://arma.sf.net"
-}
-
- at Book{Stroustrup:1997:Cpp,
- author = {Bjarne Stroustrup},
- title = {The C++ Programming Language},
- publisher = {Addison-Wesley},
- address = {Boston},
- year = 1997,
- edition = {3rd}
-}
-
- at Article{TempleLang:2009:ModestProposal,
- author = {Duncan {Temple Lang}},
- title = {A modest proposal: an approach to making the
- internal {R} system extensible},
- journal = {Computational Statistics},
- year = 2009,
- volume = 24,
- number = 2,
- pages = {271-281},
- month = {May}
-}
-
- at Article{TempleLang:2009:RGCCTranslationUnit,
- author = {Duncan {Temple Lang}},
- title = {Working with meta-data from {C/C++} code in {R}: the
- {RGCCTranslationUnit} package},
- journal = {Computational Statistics},
- year = 2009,
- volume = 24,
- number = 2,
- pages = {283-293},
- month = {May}
-}
-
- at InProceedings{Urbanek:2003:Rserve,
- author = {Simon Urbanek},
- title = {{Rserve}: A Fast Way to Provide {R} Functionality to
- Applications},
- booktitle = {Proceedings of the 3rd International Workshop on Distributed
- Statistical Computing, Vienna, Austria},
- editor = {Kurt Hornik and Friedrich Leisch and Achim Zeileis},
- year = {2003},
- url = {http://www.ci.tuwien.ac.at/Conferences/DSC-2003/Proceedings/},
- note = {{ISSN 1609-395X}}
-}
-
- at Book{Vandevoorde+Josuttis:2003:Templates,
- author = {David Vandevoorde and Nicolai M. Josuttis},
- title = {{C++} {T}emplates: The Complete Guide},
- publisher = {Addison-Wesley},
- year = 2003,
- address = {Boston}
-}
-
- at inproceedings{Veldhuizen:1998:Blitz,
- author = {Todd L. Veldhuizen},
- title = {Arrays in {Blitz++}},
- booktitle = {ISCOPE '98: Proceedings of the Second International
- Symposium on Computing in Object-Oriented Parallel
- Environments},
- note = {{ISBN} 3-540-65387-2},
- year = 1998,
- pages = {223--230},
- publisher = {Springer-Verlag},
- address = {London},
-}
Deleted: pkg/RcppEigen/vignette/RcppEigen-Intro.Rnw
===================================================================
--- pkg/RcppEigen/vignette/RcppEigen-Intro.Rnw 2011-11-01 15:52:57 UTC (rev 3257)
+++ pkg/RcppEigen/vignette/RcppEigen-Intro.Rnw 2011-11-01 15:56:02 UTC (rev 3258)
@@ -1,1298 +0,0 @@
-\documentclass[10pt]{article}
-%\VignetteIndexEntry{RcppEigen-intro}
-\usepackage[margin=1in]{geometry}
-\usepackage{color, alltt, bm, amsmath, listings}
-\lstset{language=C++,basicstyle=\small}
-\usepackage[authoryear,round,longnamesfirst]{natbib}
-\usepackage{booktabs,flafter,thumbpdf} % booktabs for nice tables, flafter for float control, thumbpdf is a tip from Achim
-\usepackage[colorlinks]{hyperref}
-\definecolor{link}{rgb}{0,0,0.3} %% next few lines courtesy of RJournal.sty
-\hypersetup{
- colorlinks,%
- citecolor=link,%
- filecolor=link,%
- linkcolor=link,%
- urlcolor=link
-}
-\newcommand{\proglang}[1]{\textsf{#1}}
-\newcommand{\pkg}[1]{{\fontseries{b}\selectfont #1}}
-\newcommand{\code}[1]{\texttt{#1}}
-\newcommand{\rank}{\operatorname{rank}}
-
-%% highlights macros
-%% Style definition file generated by highlight 2.7, http://www.andre-simon.de/
-% Highlighting theme definition:
-\newcommand{\hlstd}[1]{\textcolor[rgb]{0,0,0}{#1}}
-\newcommand{\hlnum}[1]{\textcolor[rgb]{0,0,0}{#1}}
-\newcommand{\hlopt}[1]{\textcolor[rgb]{0,0,0}{#1}}
-\newcommand{\hlesc}[1]{\textcolor[rgb]{0.74,0.55,0.55}{#1}}
-%\newcommand{\hlstr}[1]{\textcolor[rgb]{0.74,0.55,0.55}{#1}}
-\newcommand{\hlstr}[1]{\textcolor[rgb]{0.90,0.15,0.15}{#1}}
-%green: \newcommand{\hlstr}[1]{\textcolor[rgb]{0.13,0.67,0.13}{#1}} % 0.74 -> % 0.90; 0.55 -> 0.25
-\newcommand{\hldstr}[1]{\textcolor[rgb]{0.74,0.55,0.55}{#1}}
-\newcommand{\hlslc}[1]{\textcolor[rgb]{0.67,0.13,0.13}{\it{#1}}}
-\newcommand{\hlcom}[1]{\textcolor[rgb]{0.67,0.13,0.13}{\it{#1}}}
-\newcommand{\hldir}[1]{\textcolor[rgb]{0,0,0}{#1}}
-\newcommand{\hlsym}[1]{\textcolor[rgb]{0,0,0}{#1}}
-\newcommand{\hlline}[1]{\textcolor[rgb]{0.33,0.33,0.33}{#1}}
-\newcommand{\hlkwa}[1]{\textcolor[rgb]{0.61,0.13,0.93}{\bf{#1}}}
-\newcommand{\hlkwb}[1]{\textcolor[rgb]{0.13,0.54,0.13}{#1}}
-\newcommand{\hlkwc}[1]{\textcolor[rgb]{0,0,1}{#1}}
-\newcommand{\hlkwd}[1]{\textcolor[rgb]{0,0,0}{#1}}
-\definecolor{bgcolor}{rgb}{1,1,1}
-
-
-<<version,echo=FALSE,print=FALSE>>=
-prettyVersion <- packageDescription("RcppEigen")$Version
-prettyDate <- format(Sys.Date(), "%B %e, %Y")
-@
-\author{Douglas Bates \and Dirk Eddelbuettel \and Romain Fran\c{c}ois}
-\title{An Introduction to \pkg{RcppEigen}}
-\date{\pkg{RcppEigen} version \Sexpr{prettyVersion} as of \Sexpr{prettyDate}}
-
-<<preliminaries,echo=FALSE>>=
-link <- function( f, package, text = f, root = "http://finzi.psych.upenn.edu/R/library/" ){
- h <- if( missing(package) ) {
- as.character( help( f ) )
- } else {
- as.character( help( f, package = paste( package, sep = "" ) ) )
- }
- if( ! length(h) ){
- sprintf( "\\\\textbf{%s}", f )
- } else {
- rx <- "^.*/([^/]*?)/help/(.*?)$"
- package <- sub( rx, "\\1", h, perl = TRUE )
- page <- sub( rx, "\\2", h, perl = TRUE )
- sprintf( "\\\\href{%s%s/html/%s.html}{\\\\texttt{%s}}", root, package, page, text )
- }
-}
-linkS4class <- function( cl, package, text = cl, root = "http://finzi.psych.upenn.edu/R/library/" ){
- link( sprintf("%s-class", cl), package, text, root )
-}
-require( inline )
-require( RcppEigen )
-@
-\begin{document}
-
-%% Below is what DE currently uses somewhere else -- I am not religuous about
-%% the grey background etc -- comment out and see if you like any of it
-%% Just like DB below, DE also uses frame=tb for top+bottom frame lines
-\definecolor{lightgray}{rgb}{0.975,0.975,0.975}
-\lstset{backgroundcolor=\color{lightgray}}
-% \lstset{numbers=left, numberstyle=\tiny, stepnumber=2, numbersep=5pt}
-\lstset{keywordstyle=\color{black}\bfseries\tt}
-% \lstset{ %
-% %language=Octave, % the language of the code
-% %basicstyle=\footnotesize, % the size of the fonts that are used for the code
-% basicstyle=\small, % the size of the fonts that are used for the code
-% numbers=left, % where to put the line-numbers
-% %numberstyle=\footnotesize, % the size of the fonts that are used for the line-numbers
-% stepnumber=2, % the step between two line-numbers. If it's 1, each line
-% % will be numbered
-% numbersep=5pt, % how far the line-numbers are from the code
-% %backgroundcolor=\color{white}, % choose the background color. You must add \usepackage{color}
-% showspaces=false, % show spaces adding particular underscores
-% showstringspaces=false, % underline spaces within strings
-% showtabs=false, % show tabs within strings adding particular underscores
-% %frame=single, % adds a frame around the code
-% tabsize=2, % sets default tabsize to 2 spaces
-% captionpos=b, % sets the caption-position to bottom
-% breaklines=true, % sets automatic line breaking
-% breakatwhitespace=false % sets if automatic breaks should only happen at whitespace
-% %title=\lstname, % show the filename of files included with \lstinputlisting;
-% % also try caption instead of title
-% %escapeinside={\%*}{*)}, % if you want to add a comment within your code
-% %morekeywords={*,...} % if you want to add more keywords to the set
-% }
-
-
-\maketitle
-
-\abstract{
- \noindent
- The \pkg{RcppEigen} package provides access from \proglang{R}
- \citep{R:Main} to the \pkg{Eigen} \proglang{C++} template library for
- numerical linear algebra. \pkg{Rcpp} \citep{JSS:Rcpp} classes and
- specializations of the \proglang{C++} templated functions \code{as} and
- \code{wrap} from \pkg{Rcpp} provide the ``glue'' for passing objects from
- \proglang{R} to \proglang{C++} and back.
-}
-
-\section{Introduction}
-\label{sec:intro}
-
-Linear algebra is an essential building block of statistical computing.
-Operations such as matrix decompositions, linear program solvers, and
-eigenvalue / eigenvector computations are used in many estimation and
-analysis routines. As such, libraries supporting linear algebra have long been
-provided by statistical programmers for different programming languages and
-environments. \proglang{C++}, one of the central modern languages for numerical
-and statistical computing, can be extended particularly well due to its
-object-oriented nature, and numerous class libraries providing linear algebra
-routines have been written over the years.
-% Could cite Eddelbuettel (1996) here, but a real survey would be better.
-
-As both the \proglang{C++} language and standards have evolved
-\citep{Meyers:2005:EffectiveC++,Meyers:1995:MoreEffectiveC++}, so have the
-compilers implementing the language. Relatively modern language constructs
-such as template meta-programming are particularly useful. It provides both
-overloading of operations (allowing expressive code in the compiled language
-similar to what can be done in scripting languages) and can shift some of the
-computational burden from the run-time to the compile-time (though a more
-detailed discussions of template programming is however beyond this
-paper). \cite{Veldhuizen:1998:Blitz} provided an early and influential
-implementation that already demonstrated key features of this approach. Its
-usage however was held back at the time by the somewhat limited availability
-of compilers implementing all necessary features of the \proglang{C++}
-language.
-
-This situation has greatly improved over the last decade, and many more such
-libraries have been contributed. One such \proglang{C++} library is
-\pkg{Eigen} by \citet*{Eigen:Web}. \pkg{Eigen} started as a sub-project to
-KDE (a popular Linux desktop environment), initially focussing on fixed-size
-matrices which are projections in a visualization application. \pkg{Eigen}
-grew from there and has over the course of about a decade produced three
-major releases with ``Eigen3'' being the current version.
-
-\pkg{Eigen} is of interest as the \proglang{R} system for statistical
-computation and graphics \citep{R:Main} is itself easily extensible. This is
-particular true via the \proglang{C} language that most of \proglang{R}'s
-compiled core parts are written in, but also for the \proglang{C++} language
-which can interface with \proglang{C}-based systems rather easily. The manual
-``Writing R Extensions'' \citep{R:Extensions} is the basic reference for
-extending \proglang{R} with either \proglang{C} or \proglang{C++}.
-
-The \pkg{Rcpp} package by \citet{CRAN:Rcpp} facilitates extending
-\proglang{R} with \proglang{C++} code by providing seamless object mapping
-between both languages.
-%
-As stated in the \pkg{Rcpp} \citep{CRAN:Rcpp} vignette, ``Extending \pkg{Rcpp}''
-\begin{quote}
- \pkg{Rcpp} facilitates data interchange between \proglang{R} and
- \proglang{C++} through the templated functions \texttt{Rcpp::as} (for
- conversion of objects from \proglang{R} to \proglang{C++}) and
- \texttt{Rcpp::wrap} (for conversion from \proglang{C++} to \proglang{R}).
-\end{quote}
-The \pkg{RcppEigen} package provides the header files composing the
-\pkg{Eigen} \proglang{C++} template library and implementations of
-\texttt{Rcpp::as} and \texttt{Rcpp::wrap} for the \proglang{C++}
-classes defined in \pkg{Eigen}.
-
-The \pkg{Eigen} classes themselves provide high-performance,
-versatile and comprehensive representations of dense and sparse
-matrices and vectors, as well as decompositions and other functions
-to be applied to these objects. The next section introduces some
-of these classes and shows how to interface to them from \proglang{R}.
-
-\section{Eigen classes}
-\label{sec:eclasses}
-
-\pkg{Eigen} \citep*{Eigen:Web} is a \proglang{C++} template
-library providing classes for many forms of matrices, vectors, arrays
-and decompositions. These classes are flexible and comprehensive
-allowing for both high performance and well structured code
-representing high-level operations. \proglang{C++} code based on Eigen
-is often more like \proglang{R} code, working on the ``whole object'',
-rather than compiled code in other languages where operations often must be
-coded in loops.
-
-As in many \proglang{C++} template libraries using template meta-programming
-\citep{Abrahams+Gurtovoy:2004:TemplateMetaprogramming}, the templates
-themselves can be very complicated. However, \pkg{Eigen} provides
-\code{typedef}s for common classes that correspond to \proglang{R} matrices and
-vectors, as shown in Table~\ref{tab:REigen}, and this paper will use these
-\code{typedef}s throughout this document.
-\begin{table}[tb]
- \caption{Correspondence between R matrix and vector types and classes in the \code{Eigen} namespace.}
- \label{tab:REigen}
- \centering
- \begin{tabular}{l l}
- \toprule
- \multicolumn{1}{c}{\proglang{R} object type} & \multicolumn{1}{c}{\pkg{Eigen} class typedef}\\
- \midrule
- numeric matrix & \code{MatrixXd}\\
- integer matrix & \code{MatrixXi}\\
- complex matrix & \code{MatrixXcd}\\
- numeric vector & \code{VectorXd}\\
- integer vector & \code{VectorXi}\\
- complex vector & \code{VectorXcd}\\
- \code{Matrix::dgCMatrix} \phantom{XXX} & \code{SparseMatrix<double>}\\
- \bottomrule
- \end{tabular}
-\end{table}
-
-The \proglang{C++} classes shown in Table~\ref{tab:REigen} are in the
-\code{Eigen} namespace, which means that they must be written as
-\code{Eigen::MatrixXd}. However, if one prefaces the use of these class
-names with a declaration like
-
-% \begin{lstlisting}[language=C++]
-%using Eigen::MatrixXd;
-%\end{lstlisting}
-%
-%% Alternatively, use 'highlight --enclose-pre --no-doc --latex --style=emacs --syntax=C++'
-%% as the command invoked from C-u M-|
-%% For version 3.5 of highlight this should be
-%% highlight --enclose-pre --no-doc --out-format=latex --syntax=C++
-%%
-%% keep one copy to redo later
-%%
-%% using Eigen::MatrixXd;
-%%
-\begin{quote}
-\noindent
-\ttfamily
-\hlstd{}\hlkwa{using\ }\hlstd{Eigen}\hlopt{::}\hlstd{MatrixXd}\hlopt{;}\hlstd{}\hspace*{\fill}\\
-\mbox{}
-\normalfont
-\normalsize
-\end{quote}
-then one can use these names without the namespace qualifier.
-
-\subsection{Mapped matrices in Eigen}
-\label{sec:mapped}
-
-Storage for the contents of matrices from the classes shown in
-Table~\ref{tab:REigen} is allocated and controlled by the class
-constructors and destructors. Creating an instance of such a class
-from an \proglang{R} object involves copying its contents. An
-alternative is to have the contents of the \proglang{R} matrix or
-vector mapped to the contents of the object from the Eigen class. For
-dense matrices one can use the Eigen templated class \code{Map}, and for
-sparse matrices one can deploy the Eigen templated class \code{MappedSparseMatrix}.
-
-One must, of course, be careful not to modify the contents of the
-\proglang{R} object in the \proglang{C++} code. A recommended
-practice is always to declare mapped objects as \lstinline!const!.
-
-\subsection{Arrays in Eigen}
-\label{sec:arrays}
-
-For matrix and vector classes \pkg{Eigen} overloads the \texttt{`*'}
-operator to indicate matrix multiplication. Occasionally
-component-wise operations instead of matrix operations are preferred. The
-\code{Array} templated classes are used in \pkg{Eigen} for
-component-wise operations. Most often the \code{array()} method is used
-for Matrix or Vector objects to create the array. On those occasions
-when one wishes to convert an array to a matrix or vector object
-the \code{matrix()} method is used.
-
-\subsection{Structured matrices in \pkg{Eigen}}
-\label{sec:structured}
-
-There are \pkg{Eigen} classes for matrices with special structure such
-as symmetric matrices, triangular matrices and banded matrices. For
-dense matrices, these special structures are described as ``views'',
-meaning that the full dense matrix is stored but only part of the
-matrix is used in operations. For a symmetric matrix one needs to
-specify whether the lower triangle or the upper triangle is to be used as
-the contents, with the other triangle defined by the implicit symmetry.
-
-
-\section{Some simple examples}
-\label{sec:simple}
-
-\proglang{C++} functions to perform simple operations on matrices or
-vectors can follow a pattern of:
-\begin{enumerate}
-\item Map the \proglang{R} objects passed as arguments into Eigen objects.
-\item Create the result.
-\item Return \code{Rcpp::wrap} applied to the result.
-\end{enumerate}
-
-An idiom for the first step is
-%\begin{lstlisting}[language=C++]
-% using Eigen::Map;
-% using Eigen::MatrixXd;
-% using Rcpp::as;
-
-% const Map<MatrixXd> A(as<Map<MatrixXd> >(AA));
-%\end{lstlisting}
-\begin{quote}
- \noindent
- \ttfamily
- \hlstd{}\hlkwa{using\ }\hlstd{Eigen}\hlsym{::}\hlstd{Map}\hlsym{;}\hspace*{\fill}\\
- \hlstd{}\hlkwa{using\ }\hlstd{Eigen}\hlsym{::}\hlstd{MatrixXd}\hlsym{;}\hspace*{\fill}\\
- \hlstd{}\hlkwa{using\ }\hlstd{Rcpp}\hlsym{::}\hlstd{as}\hlsym{;}\hspace*{\fill}\\
- \hlstd{}\hspace*{\fill}\\
- \hlkwb{const\ }\hlstd{Map}\hlsym{$<$}\hlstd{MatrixXd}\hlsym{$>$}\hlstd{\ \ }\hlsym{}\hlstd{}\hlkwd{A}\hlstd{}\hlsym{(}\hlstd{as}\hlsym{$<$}\hlstd{Map}\hlsym{$<$}\hlstd{MatrixXd}\hlsym{$>$\ $>$(}\hlstd{AA}\hlsym{));}\hlstd{}\hspace*{\fill}\\
- \mbox{}
- \normalfont
-\end{quote}
-where \code{AA} is the name of the R object (called an \code{SEXP} in
-\proglang{C} and \proglang{C++}) passed to the \proglang{C++} function.
-
-The \Sexpr{link("cxxfunction")} from the \pkg{inline}
-package \citep*{CRAN:inline} for \proglang{R} and its \pkg{RcppEigen}
-plugin provide a convenient way of developing and debugging the
-\proglang{C++} code. For actual production code one generally
-incorporates the \proglang{C++} source code files in a package and
-include the line \code{LinkingTo: Rcpp, RcppEigen} in the package's
-\code{DESCRIPTION} file. The
-\Sexpr{link("RcppEigen.package.skeleton")} function provides a quick
-way of generating the skeleton of a package using \pkg{RcppEigen}
-facilities.
-
-The \code{cxxfunction} with the \code{"Rcpp"} or \code{"RcppEigen"}
-plugins has the \code{as} and \code{wrap} functions already defined as
-\code{Rcpp::as} and \code{Rcpp::wrap}. In the examples below
-these declarations are omitted. It is important to remember that they are
-needed in actual \proglang{C++} source code for a package.
-
-The first few examples are simply for illustration as the operations
-shown could be more effectively performed directly in \proglang{R}.
-Finally, the results from \pkg{Eigen} are compared to those from the direct
-\proglang{R} results.
-
-\subsection{Transpose of an integer matrix}
-\label{sec:transpose}
-
-The next \proglang{R} code snippet creates a simple matrix of integers
-<<Adef>>=
-(A <- matrix(1:6, ncol=2))
-str(A)
-@
-and, in Listing~\ref{trans}, the \code{transpose()} method for the
-\code{Eigen::MatrixXi} class is used to return the transpose of the supplied matrix. The \proglang{R}
-matrix in the \code{SEXP} \code{AA} is mapped to an
-\code{Eigen::MatrixXi} object then the matrix \code{At} is constructed
-from its transpose and returned to \proglang{R}.
-
-<<transCpp,echo=FALSE>>=
-transCpp <-'
-using Eigen::Map;
-using Eigen::MatrixXi;
- // Map the integer matrix AA from R
-const Map<MatrixXi> A(as<Map<MatrixXi> >(AA));
- // evaluate and return the transpose of A
-const MatrixXi At(A.transpose());
-return wrap(At);
-'
-@
-%\begin{lstlisting}[frame=tb,caption={transCpp: Transpose a matrix of integers},label=trans]
-%<<transCppLst,results=tex,echo=FALSE >>=
-%cat(transCpp, "\n")
-%@
-%\end{lstlisting}
-
-\begin{figure}[h]
- \caption{\code{transCpp}: Transpose a matrix of integers}
- \label{trans}
- \begin{quote}
- \noindent
- \ttfamily
- \hlstd{}\hlkwa{using\ }\hlstd{Eigen}\hlsym{::}\hlstd{Map}\hlsym{;}\hspace*{\fill}\\
- \hlstd{}\hlkwa{using\ }\hlstd{Eigen}\hlsym{::}\hlstd{MatrixXi}\hlsym{;}\hspace*{\fill}\\
[TRUNCATED]
To get the complete diff run:
svnlook diff /svnroot/rcpp -r 3258
More information about the Rcpp-commits
mailing list