SlideShare a Scribd company logo
Turbocharge your R

                    Rob Zinkov


                   July 12th, 2011




Rob Zinkov ()       Turbocharge your R   July 12th, 2011   1 / 23
Outline



1   Introduction


2   .C


3   .Call


4   Rcpp




         Rob Zinkov ()   Turbocharge your R   July 12th, 2011   2 / 23
Introduction


What is the point of this talk?




Show you how to speed up your R code




     Rob Zinkov ()            Turbocharge your R   July 12th, 2011   3 / 23
Introduction


Caveats




  • Please try to optimize your R code first
  • Some of these mechanisms will make coding harder




     Rob Zinkov ()              Turbocharge your R     July 12th, 2011   4 / 23
.C




• This is the basic mechanism
• Explicitly copies the data into C
• Only accepts integer vectors




    Rob Zinkov ()            Turbocharge your R   July 12th, 2011   5 / 23
.C


Step 1. Put function in file (foo.c)



void foo(int *nin, double *x)
{
int n = nin[0];

int i;

for (i=0; i<n; i++)
x[i] = x[i] * x[i];
}




     Rob Zinkov ()       Turbocharge your R   July 12th, 2011   6 / 23
.C




• Note this is a void function
• Note arguments are passed in as pointers
• Try to limit one function per file




    Rob Zinkov ()            Turbocharge your R   July 12th, 2011   7 / 23
.C


Step 2. Compile file with R




$ R CMD SHLIB foo.c




     Rob Zinkov ()     Turbocharge your R   July 12th, 2011   8 / 23
.C


Step 3. Load into R




> dyn.load("foo.so")




     Rob Zinkov ()     Turbocharge your R   July 12th, 2011   9 / 23
.C


Step 4. Call your code




 .C("foo", n=as.integer(5), x=as.double(rnorm(5)))




     Rob Zinkov ()       Turbocharge your R    July 12th, 2011   10 / 23
.C




• Arguments to .C are name of function followed by arguments
• Arguments must be the right type
• Touching C code runs risks of segfaults




   Rob Zinkov ()            Turbocharge your R       July 12th, 2011   11 / 23
.Call


Why?




 • Less copying of data structures (lower memory)
 • Access more of R data structures
 • Access more kinds of R data
 • Do more in C




    Rob Zinkov ()            Turbocharge your R     July 12th, 2011   12 / 23
.Call


.Call code


#include <R.h>
#include <Rinternals.h>
#include <Rmath.h>

SEXP vecSum(SEXP Rvec){
  int i, n;
  double *vec, value = 0;
  vec = REAL(Rvec);
  n = length(Rvec);
  for (i = 0; i < n; i++) value += vec[i];
  printf("The value is: %4.6f n", value);
  return R_NilValue;
}


     Rob Zinkov ()        Turbocharge your R   July 12th, 2011   13 / 23
.Call




R CMD SHLIB vecSum.c
dyn.load("vecSum.so")
.Call("vecSum", rnorm(10))




     Rob Zinkov ()       Turbocharge your R   July 12th, 2011   14 / 23
.Call




SEXP ab(SEXP Ra, SEXP Rb){
   int i, a, b;
   SEXP Rval;
   Ra = coerceVector(Ra, INTSXP);
   Rb = coerceVector(Rb, INTSXP);
   a = INTEGER(Ra)[0];
   b = INTEGER(Rb)[0];
   PROTECT(Rval = allocVector(INTSXP, b - a + 1));
   for (i = a; i <= b; i++)
       INTEGER(Rval)[i - a] = i;
   UNPROTECT(1);
   return Rval;
}



     Rob Zinkov ()       Turbocharge your R    July 12th, 2011   15 / 23
.Call




Since memory is shared explicit care must be taken not to collide with R




      Rob Zinkov ()            Turbocharge your R         July 12th, 2011   16 / 23
Rcpp


Why?




 • Use C++ instead of C
 • Ability to use objects to represent R more naturally
 • Easier to load code




     Rob Zinkov ()            Turbocharge your R          July 12th, 2011   17 / 23
Rcpp




src <- ’
    IntegerVector tmp(clone(x));
    double rate = as< double >(y);
    int tmpsize = tmp.size();
    RNGScope scope;
    for (int ii =0; ii < tmpsize; ii++) {
        tmp(ii) = Rf_rbinom(tmp(ii), rate);
    };
    return tmp;
’
require(inline)
## compile the function, inspect the process with verbose=T
testfun2 = cxxfunction(signature(x=’integer’, y=’numeric’),
                       src, plugin=’Rcpp’, verbose=T)



     Rob Zinkov ()       Turbocharge your R    July 12th, 2011   18 / 23
Rcpp




require(inline)
testfun = cxxfunction(
    signature(x="numeric",
              i="integer"),
              body = ’
                        NumericVector xx(x);
                        int ii = as<int>(i);
                        xx = xx * ii;
                        return( xx );
                     ’, plugin="Rcpp")
testfun(1:5, 3)




     Rob Zinkov ()       Turbocharge your R    July 12th, 2011   19 / 23
Rcpp


Conclusions




It is fairly easy to make R faster




      Rob Zinkov ()              Turbocharge your R   July 12th, 2011   20 / 23
Rcpp


Conclusions




Now go make your R code faster




     Rob Zinkov ()          Turbocharge your R   July 12th, 2011   21 / 23
Rcpp


References



  • http://www.stat.umn.edu/ charlie/rc/
  • http://helmingstay.blogspot.com/2011/06/efficient-loops-in-r-
    complexity-versus.html
  • http://www.sfu.ca/ sblay/R-C-interface.ppt
  • http://www.biostat.jhsph.edu/ bcaffo/statcomp/files/dotCall.pdf
  • http://cran.r-project.org/web/packages/Rcpp/vignettes/Rcpp-
    quickref.pdf
  • http://www.jstatsoft.org/v40/i08/paper




     Rob Zinkov ()           Turbocharge your R        July 12th, 2011   22 / 23
Rcpp




                Questions?




Rob Zinkov ()     Turbocharge your R   July 12th, 2011   23 / 23

More Related Content

What's hot

LTO plugin
LTO pluginLTO plugin
LTO plugin
Wang Hsiangkai
 
What's New in C# 6
What's New in C# 6What's New in C# 6
What's New in C# 6
Mikhail Shcherbakov
 
Cobol, lisp, and python
Cobol, lisp, and pythonCobol, lisp, and python
Cobol, lisp, and python
Hoang Nguyen
 
3.5 equivalence of pushdown automata and cfl
3.5 equivalence of pushdown automata and cfl3.5 equivalence of pushdown automata and cfl
3.5 equivalence of pushdown automata and cfl
Sampath Kumar S
 
Debugging Your PHP Cake Application
Debugging Your PHP Cake ApplicationDebugging Your PHP Cake Application
Debugging Your PHP Cake Application
Jose Diaz-Gonzalez
 
Pda to cfg h2
Pda to cfg h2Pda to cfg h2
Pda to cfg h2
Rajendran
 
2014.10 - Towards Description Set Profiles for RDF Using SPARQL as Intermedia...
2014.10 - Towards Description Set Profiles for RDF Using SPARQL as Intermedia...2014.10 - Towards Description Set Profiles for RDF Using SPARQL as Intermedia...
2014.10 - Towards Description Set Profiles for RDF Using SPARQL as Intermedia...
Dr.-Ing. Thomas Hartmann
 
15CS664 Python Question Bank-3
15CS664 Python Question Bank-315CS664 Python Question Bank-3
15CS664 Python Question Bank-3
Syed Mustafa
 
A Multi-theory Logic Language for the World Wide Web
A Multi-theory Logic Language for the World Wide WebA Multi-theory Logic Language for the World Wide Web
A Multi-theory Logic Language for the World Wide Web
gpiancastelli
 
Quines—Programming your way back to where you were
Quines—Programming your way back to where you wereQuines—Programming your way back to where you were
Quines—Programming your way back to where you were
Jean-Baptiste Mazon
 
Debugging and Profiling Rails Application
Debugging and Profiling Rails ApplicationDebugging and Profiling Rails Application
Debugging and Profiling Rails Application
David Paluy
 
Microsoft F# and functional programming
Microsoft F# and functional programmingMicrosoft F# and functional programming
Microsoft F# and functional programming
Radek Mika
 
「C++コンパイラアップデート」
「C++コンパイラアップデート」「C++コンパイラアップデート」
「C++コンパイラアップデート」
Embarcadero Technologies
 
Channels, Concurrency, and Cores: A new Concurrent ML implementation (Curry O...
Channels, Concurrency, and Cores: A new Concurrent ML implementation (Curry O...Channels, Concurrency, and Cores: A new Concurrent ML implementation (Curry O...
Channels, Concurrency, and Cores: A new Concurrent ML implementation (Curry O...
Igalia
 
Unicode Cjk Compatible Variations
Unicode Cjk Compatible VariationsUnicode Cjk Compatible Variations
Unicode Cjk Compatible Variations
Joe Jiang
 

What's hot (15)

LTO plugin
LTO pluginLTO plugin
LTO plugin
 
What's New in C# 6
What's New in C# 6What's New in C# 6
What's New in C# 6
 
Cobol, lisp, and python
Cobol, lisp, and pythonCobol, lisp, and python
Cobol, lisp, and python
 
3.5 equivalence of pushdown automata and cfl
3.5 equivalence of pushdown automata and cfl3.5 equivalence of pushdown automata and cfl
3.5 equivalence of pushdown automata and cfl
 
Debugging Your PHP Cake Application
Debugging Your PHP Cake ApplicationDebugging Your PHP Cake Application
Debugging Your PHP Cake Application
 
Pda to cfg h2
Pda to cfg h2Pda to cfg h2
Pda to cfg h2
 
2014.10 - Towards Description Set Profiles for RDF Using SPARQL as Intermedia...
2014.10 - Towards Description Set Profiles for RDF Using SPARQL as Intermedia...2014.10 - Towards Description Set Profiles for RDF Using SPARQL as Intermedia...
2014.10 - Towards Description Set Profiles for RDF Using SPARQL as Intermedia...
 
15CS664 Python Question Bank-3
15CS664 Python Question Bank-315CS664 Python Question Bank-3
15CS664 Python Question Bank-3
 
A Multi-theory Logic Language for the World Wide Web
A Multi-theory Logic Language for the World Wide WebA Multi-theory Logic Language for the World Wide Web
A Multi-theory Logic Language for the World Wide Web
 
Quines—Programming your way back to where you were
Quines—Programming your way back to where you wereQuines—Programming your way back to where you were
Quines—Programming your way back to where you were
 
Debugging and Profiling Rails Application
Debugging and Profiling Rails ApplicationDebugging and Profiling Rails Application
Debugging and Profiling Rails Application
 
Microsoft F# and functional programming
Microsoft F# and functional programmingMicrosoft F# and functional programming
Microsoft F# and functional programming
 
「C++コンパイラアップデート」
「C++コンパイラアップデート」「C++コンパイラアップデート」
「C++コンパイラアップデート」
 
Channels, Concurrency, and Cores: A new Concurrent ML implementation (Curry O...
Channels, Concurrency, and Cores: A new Concurrent ML implementation (Curry O...Channels, Concurrency, and Cores: A new Concurrent ML implementation (Curry O...
Channels, Concurrency, and Cores: A new Concurrent ML implementation (Curry O...
 
Unicode Cjk Compatible Variations
Unicode Cjk Compatible VariationsUnicode Cjk Compatible Variations
Unicode Cjk Compatible Variations
 

Viewers also liked

Biblioteca del Congreso Nacional Argentino
Biblioteca del Congreso Nacional ArgentinoBiblioteca del Congreso Nacional Argentino
Biblioteca del Congreso Nacional Argentino
martarure
 
OOP Is More Then Cars and Dogs - Midwest PHP 2017
OOP Is More Then Cars and Dogs - Midwest PHP 2017OOP Is More Then Cars and Dogs - Midwest PHP 2017
OOP Is More Then Cars and Dogs - Midwest PHP 2017
Chris Tankersley
 
OOP in Java
OOP in JavaOOP in Java
OOP in Java
wiradikusuma
 
Java 8 new features
Java 8 new featuresJava 8 new features
Java 8 new features
Aniket Thakur
 
What does OOP stand for?
What does OOP stand for?What does OOP stand for?
What does OOP stand for?
Colin Riley
 
Modern JavaScript Applications: Design Patterns
Modern JavaScript Applications: Design PatternsModern JavaScript Applications: Design Patterns
Modern JavaScript Applications: Design Patterns
Volodymyr Voytyshyn
 
Brain Computer Interface.ppt
Brain Computer Interface.pptBrain Computer Interface.ppt
Brain Computer Interface.ppt
Amal Sanjay
 
Object-oriented concepts
Object-oriented conceptsObject-oriented concepts
Object-oriented concepts
BG Java EE Course
 
Uml diagrams
Uml diagramsUml diagrams
Uml diagrams
barney92
 
Java OOP s concepts and buzzwords
Java OOP s concepts and buzzwordsJava OOP s concepts and buzzwords
Java OOP s concepts and buzzwords
Raja Sekhar
 
Object Oriented Programming Concepts
Object Oriented Programming ConceptsObject Oriented Programming Concepts
Object Oriented Programming Concepts
thinkphp
 
Introduction to java
Introduction to javaIntroduction to java
Introduction to java
Veerabadra Badra
 
Jump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design PatternJump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design Pattern
Nishith Shukla
 

Viewers also liked (13)

Biblioteca del Congreso Nacional Argentino
Biblioteca del Congreso Nacional ArgentinoBiblioteca del Congreso Nacional Argentino
Biblioteca del Congreso Nacional Argentino
 
OOP Is More Then Cars and Dogs - Midwest PHP 2017
OOP Is More Then Cars and Dogs - Midwest PHP 2017OOP Is More Then Cars and Dogs - Midwest PHP 2017
OOP Is More Then Cars and Dogs - Midwest PHP 2017
 
OOP in Java
OOP in JavaOOP in Java
OOP in Java
 
Java 8 new features
Java 8 new featuresJava 8 new features
Java 8 new features
 
What does OOP stand for?
What does OOP stand for?What does OOP stand for?
What does OOP stand for?
 
Modern JavaScript Applications: Design Patterns
Modern JavaScript Applications: Design PatternsModern JavaScript Applications: Design Patterns
Modern JavaScript Applications: Design Patterns
 
Brain Computer Interface.ppt
Brain Computer Interface.pptBrain Computer Interface.ppt
Brain Computer Interface.ppt
 
Object-oriented concepts
Object-oriented conceptsObject-oriented concepts
Object-oriented concepts
 
Uml diagrams
Uml diagramsUml diagrams
Uml diagrams
 
Java OOP s concepts and buzzwords
Java OOP s concepts and buzzwordsJava OOP s concepts and buzzwords
Java OOP s concepts and buzzwords
 
Object Oriented Programming Concepts
Object Oriented Programming ConceptsObject Oriented Programming Concepts
Object Oriented Programming Concepts
 
Introduction to java
Introduction to javaIntroduction to java
Introduction to java
 
Jump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design PatternJump start to OOP, OOAD, and Design Pattern
Jump start to OOP, OOAD, and Design Pattern
 

Similar to Los Angeles R users group - July 12 2011 - Part 2

Dot Call interface
Dot Call interfaceDot Call interface
Dot Call interface
Hao Chai
 
Functional Programming in R
Functional Programming in RFunctional Programming in R
Functional Programming in R
David Springate
 
Rcpp: Seemless R and C++
Rcpp: Seemless R and C++Rcpp: Seemless R and C++
Rcpp: Seemless R and C++
Romain Francois
 
Rcpp11 useR2014
Rcpp11 useR2014Rcpp11 useR2014
Rcpp11 useR2014
Romain Francois
 
F#3.0
F#3.0 F#3.0
Rcpp: Seemless R and C++
Rcpp: Seemless R and C++Rcpp: Seemless R and C++
Rcpp: Seemless R and C++
Romain Francois
 
Rcpp11
Rcpp11Rcpp11
Native interfaces for R
Native interfaces for RNative interfaces for R
Native interfaces for R
Seth Falcon
 
Foreman - Process manager for applications with multiple components
Foreman - Process manager for applications with multiple componentsForeman - Process manager for applications with multiple components
Foreman - Process manager for applications with multiple components
Stoyan Zhekov
 
Special topics in finance lecture 2
Special topics in finance   lecture 2Special topics in finance   lecture 2
Special topics in finance lecture 2
Dr. Muhammad Ali Tirmizi., Ph.D.
 
R/C++ talk at earl 2014
R/C++ talk at earl 2014R/C++ talk at earl 2014
R/C++ talk at earl 2014
Romain Francois
 
Shift rotate
Shift rotateShift rotate
Shift rotate
fika sweety
 
How to Begin to Develop Ruby Core
How to Begin to Develop Ruby CoreHow to Begin to Develop Ruby Core
How to Begin to Develop Ruby Core
Hiroshi SHIBATA
 
Iron Languages - NYC CodeCamp 2/19/2011
Iron Languages - NYC CodeCamp 2/19/2011Iron Languages - NYC CodeCamp 2/19/2011
Iron Languages - NYC CodeCamp 2/19/2011
Jimmy Schementi
 
Rcpp: Seemless R and C++
Rcpp: Seemless R and C++Rcpp: Seemless R and C++
Rcpp: Seemless R and C++
Romain Francois
 
Building Web APIs that Scale
Building Web APIs that ScaleBuilding Web APIs that Scale
Building Web APIs that Scale
Salesforce Developers
 
8051assembly language
8051assembly language8051assembly language
8051assembly language
Hisham Mat Hussin
 
Building native Android applications with Mirah and Pindah
Building native Android applications with Mirah and PindahBuilding native Android applications with Mirah and Pindah
Building native Android applications with Mirah and Pindah
Nick Plante
 
IIUG 2016 Gathering Informix data into R
IIUG 2016 Gathering Informix data into RIIUG 2016 Gathering Informix data into R
IIUG 2016 Gathering Informix data into R
Kevin Smith
 
Best corporate-r-programming-training-in-mumbai
Best corporate-r-programming-training-in-mumbaiBest corporate-r-programming-training-in-mumbai
Best corporate-r-programming-training-in-mumbai
Unmesh Baile
 

Similar to Los Angeles R users group - July 12 2011 - Part 2 (20)

Dot Call interface
Dot Call interfaceDot Call interface
Dot Call interface
 
Functional Programming in R
Functional Programming in RFunctional Programming in R
Functional Programming in R
 
Rcpp: Seemless R and C++
Rcpp: Seemless R and C++Rcpp: Seemless R and C++
Rcpp: Seemless R and C++
 
Rcpp11 useR2014
Rcpp11 useR2014Rcpp11 useR2014
Rcpp11 useR2014
 
F#3.0
F#3.0 F#3.0
F#3.0
 
Rcpp: Seemless R and C++
Rcpp: Seemless R and C++Rcpp: Seemless R and C++
Rcpp: Seemless R and C++
 
Rcpp11
Rcpp11Rcpp11
Rcpp11
 
Native interfaces for R
Native interfaces for RNative interfaces for R
Native interfaces for R
 
Foreman - Process manager for applications with multiple components
Foreman - Process manager for applications with multiple componentsForeman - Process manager for applications with multiple components
Foreman - Process manager for applications with multiple components
 
Special topics in finance lecture 2
Special topics in finance   lecture 2Special topics in finance   lecture 2
Special topics in finance lecture 2
 
R/C++ talk at earl 2014
R/C++ talk at earl 2014R/C++ talk at earl 2014
R/C++ talk at earl 2014
 
Shift rotate
Shift rotateShift rotate
Shift rotate
 
How to Begin to Develop Ruby Core
How to Begin to Develop Ruby CoreHow to Begin to Develop Ruby Core
How to Begin to Develop Ruby Core
 
Iron Languages - NYC CodeCamp 2/19/2011
Iron Languages - NYC CodeCamp 2/19/2011Iron Languages - NYC CodeCamp 2/19/2011
Iron Languages - NYC CodeCamp 2/19/2011
 
Rcpp: Seemless R and C++
Rcpp: Seemless R and C++Rcpp: Seemless R and C++
Rcpp: Seemless R and C++
 
Building Web APIs that Scale
Building Web APIs that ScaleBuilding Web APIs that Scale
Building Web APIs that Scale
 
8051assembly language
8051assembly language8051assembly language
8051assembly language
 
Building native Android applications with Mirah and Pindah
Building native Android applications with Mirah and PindahBuilding native Android applications with Mirah and Pindah
Building native Android applications with Mirah and Pindah
 
IIUG 2016 Gathering Informix data into R
IIUG 2016 Gathering Informix data into RIIUG 2016 Gathering Informix data into R
IIUG 2016 Gathering Informix data into R
 
Best corporate-r-programming-training-in-mumbai
Best corporate-r-programming-training-in-mumbaiBest corporate-r-programming-training-in-mumbai
Best corporate-r-programming-training-in-mumbai
 

More from rusersla

LA R meetup - Nov 2013 - Eric Klusman
LA R meetup - Nov 2013 - Eric KlusmanLA R meetup - Nov 2013 - Eric Klusman
LA R meetup - Nov 2013 - Eric Klusman
rusersla
 
useR2011 - Whitcher
useR2011 - WhitcheruseR2011 - Whitcher
useR2011 - Whitcher
rusersla
 
useR2011 - Rougier
useR2011 - RougieruseR2011 - Rougier
useR2011 - Rougier
rusersla
 
useR2011 - Huber
useR2011 - HuberuseR2011 - Huber
useR2011 - Huber
rusersla
 
useR2011 - Gromping
useR2011 - Gromping useR2011 - Gromping
useR2011 - Gromping
rusersla
 
useR2011 - Edlefsen
useR2011 - EdlefsenuseR2011 - Edlefsen
useR2011 - Edlefsen
rusersla
 
Los Angeles R users group - July 12 2011 - Part 1
Los Angeles R users group - July 12 2011 - Part 1Los Angeles R users group - July 12 2011 - Part 1
Los Angeles R users group - July 12 2011 - Part 1
rusersla
 
Los Angeles R users group - Nov 17 2010 - Part 2
Los Angeles R users group - Nov 17 2010 - Part 2Los Angeles R users group - Nov 17 2010 - Part 2
Los Angeles R users group - Nov 17 2010 - Part 2
rusersla
 
Los Angeles R users group - Dec 14 2010 - Part 1
Los Angeles R users group - Dec 14 2010 - Part 1Los Angeles R users group - Dec 14 2010 - Part 1
Los Angeles R users group - Dec 14 2010 - Part 1
rusersla
 
Los Angeles R users group - Dec 14 2010 - Part 3
Los Angeles R users group - Dec 14 2010 - Part 3Los Angeles R users group - Dec 14 2010 - Part 3
Los Angeles R users group - Dec 14 2010 - Part 3
rusersla
 
Los Angeles R users group - Dec 14 2010 - Part 2
Los Angeles R users group - Dec 14 2010 - Part 2Los Angeles R users group - Dec 14 2010 - Part 2
Los Angeles R users group - Dec 14 2010 - Part 2
rusersla
 

More from rusersla (11)

LA R meetup - Nov 2013 - Eric Klusman
LA R meetup - Nov 2013 - Eric KlusmanLA R meetup - Nov 2013 - Eric Klusman
LA R meetup - Nov 2013 - Eric Klusman
 
useR2011 - Whitcher
useR2011 - WhitcheruseR2011 - Whitcher
useR2011 - Whitcher
 
useR2011 - Rougier
useR2011 - RougieruseR2011 - Rougier
useR2011 - Rougier
 
useR2011 - Huber
useR2011 - HuberuseR2011 - Huber
useR2011 - Huber
 
useR2011 - Gromping
useR2011 - Gromping useR2011 - Gromping
useR2011 - Gromping
 
useR2011 - Edlefsen
useR2011 - EdlefsenuseR2011 - Edlefsen
useR2011 - Edlefsen
 
Los Angeles R users group - July 12 2011 - Part 1
Los Angeles R users group - July 12 2011 - Part 1Los Angeles R users group - July 12 2011 - Part 1
Los Angeles R users group - July 12 2011 - Part 1
 
Los Angeles R users group - Nov 17 2010 - Part 2
Los Angeles R users group - Nov 17 2010 - Part 2Los Angeles R users group - Nov 17 2010 - Part 2
Los Angeles R users group - Nov 17 2010 - Part 2
 
Los Angeles R users group - Dec 14 2010 - Part 1
Los Angeles R users group - Dec 14 2010 - Part 1Los Angeles R users group - Dec 14 2010 - Part 1
Los Angeles R users group - Dec 14 2010 - Part 1
 
Los Angeles R users group - Dec 14 2010 - Part 3
Los Angeles R users group - Dec 14 2010 - Part 3Los Angeles R users group - Dec 14 2010 - Part 3
Los Angeles R users group - Dec 14 2010 - Part 3
 
Los Angeles R users group - Dec 14 2010 - Part 2
Los Angeles R users group - Dec 14 2010 - Part 2Los Angeles R users group - Dec 14 2010 - Part 2
Los Angeles R users group - Dec 14 2010 - Part 2
 

Recently uploaded

What Outdoor Adventures Await Young Adults in Montreal's Surrounding Nature
What Outdoor Adventures Await Young Adults in Montreal's Surrounding NatureWhat Outdoor Adventures Await Young Adults in Montreal's Surrounding Nature
What Outdoor Adventures Await Young Adults in Montreal's Surrounding Nature
Spade & Palacio Tours
 
Ready for Cold Weather Rafting Here's What to Wear to Stay Comfortable!
Ready for Cold Weather Rafting Here's What to Wear to Stay Comfortable!Ready for Cold Weather Rafting Here's What to Wear to Stay Comfortable!
Ready for Cold Weather Rafting Here's What to Wear to Stay Comfortable!
River Recreation - Washington Whitewater Rafting
 
How To Change Your Name On American Airlines Aadvantage.pptx
How To Change Your Name On American Airlines Aadvantage.pptxHow To Change Your Name On American Airlines Aadvantage.pptx
How To Change Your Name On American Airlines Aadvantage.pptx
edqour001namechange
 
在线办理(BU毕业证书)波士顿大学毕业证录取通知书一模一样
在线办理(BU毕业证书)波士顿大学毕业证录取通知书一模一样在线办理(BU毕业证书)波士顿大学毕业证录取通知书一模一样
在线办理(BU毕业证书)波士顿大学毕业证录取通知书一模一样
v6ldcxuq
 
Un viaje a Argentina updated xxxxxxxxxxx
Un viaje a Argentina updated xxxxxxxxxxxUn viaje a Argentina updated xxxxxxxxxxx
Un viaje a Argentina updated xxxxxxxxxxx
Judy Hochberg
 
Nature of the task 1. write a paragraph about your trip to dubai and what ar...
Nature of the task  1. write a paragraph about your trip to dubai and what ar...Nature of the task  1. write a paragraph about your trip to dubai and what ar...
Nature of the task 1. write a paragraph about your trip to dubai and what ar...
solutionaia
 
Top 10 Tourist Places in South India to Explore.pdf
Top 10 Tourist Places in South India to Explore.pdfTop 10 Tourist Places in South India to Explore.pdf
Top 10 Tourist Places in South India to Explore.pdf
Savita Yadav
 
How To Change A Name On American Airlines Ticket.pptx
How To Change A Name On American Airlines Ticket.pptxHow To Change A Name On American Airlines Ticket.pptx
How To Change A Name On American Airlines Ticket.pptx
edqour001namechange
 
Explore Architectural Wonders and Vibrant Culture With Naples Tours
Explore Architectural Wonders and Vibrant Culture With Naples ToursExplore Architectural Wonders and Vibrant Culture With Naples Tours
Explore Architectural Wonders and Vibrant Culture With Naples Tours
Naples Tours
 
How Do I Plan a Kilimanjaro Climb? 7 Essential Tips Revealed.pdf
How Do I Plan a Kilimanjaro Climb? 7 Essential Tips Revealed.pdfHow Do I Plan a Kilimanjaro Climb? 7 Essential Tips Revealed.pdf
How Do I Plan a Kilimanjaro Climb? 7 Essential Tips Revealed.pdf
Eastafrica Travelcompany
 
Golden Gate Bridge: Magnificent Architecture in San Francisco | CIO Women Mag...
Golden Gate Bridge: Magnificent Architecture in San Francisco | CIO Women Mag...Golden Gate Bridge: Magnificent Architecture in San Francisco | CIO Women Mag...
Golden Gate Bridge: Magnificent Architecture in San Francisco | CIO Women Mag...
CIOWomenMagazine
 
Discovering Egypt A Step-by-Step Guide to Planning Your Trip.ppt
Discovering Egypt A Step-by-Step Guide to Planning Your Trip.pptDiscovering Egypt A Step-by-Step Guide to Planning Your Trip.ppt
Discovering Egypt A Step-by-Step Guide to Planning Your Trip.ppt
Imperial Egypt
 
What Challenges Await Beginners in Snowshoeing
What Challenges Await Beginners in SnowshoeingWhat Challenges Await Beginners in Snowshoeing
What Challenges Await Beginners in Snowshoeing
Snowshoe Tahoe
 
Excursions in Tahiti Island Adventure
Excursions in Tahiti Island AdventureExcursions in Tahiti Island Adventure
Excursions in Tahiti Island Adventure
Unique Tahiti
 
Discover the Magic of Ibiza An Unforgettable Boat Trip
Discover the Magic of Ibiza An Unforgettable Boat TripDiscover the Magic of Ibiza An Unforgettable Boat Trip
Discover the Magic of Ibiza An Unforgettable Boat Trip
White Island Charter
 
Un viaje a Buenos Aires y sus alrededores
Un viaje a Buenos Aires y sus alrededoresUn viaje a Buenos Aires y sus alrededores
Un viaje a Buenos Aires y sus alrededores
Judy Hochberg
 
The Ultimate Travel Guide to Hawaii Island Hopping in 2024
The Ultimate Travel Guide to Hawaii Island Hopping in 2024The Ultimate Travel Guide to Hawaii Island Hopping in 2024
The Ultimate Travel Guide to Hawaii Island Hopping in 2024
adventuressabifn
 
Wayanad-The-Touristry-Heaven to the tour.pptx
Wayanad-The-Touristry-Heaven to the tour.pptxWayanad-The-Touristry-Heaven to the tour.pptx
Wayanad-The-Touristry-Heaven to the tour.pptx
cosmo-soil
 
bangalore metro routes, stations, timings
bangalore metro routes, stations, timingsbangalore metro routes, stations, timings
bangalore metro routes, stations, timings
narinav14
 
一比一原版(UST毕业证)圣托马斯大学毕业证如何办理
一比一原版(UST毕业证)圣托马斯大学毕业证如何办理一比一原版(UST毕业证)圣托马斯大学毕业证如何办理
一比一原版(UST毕业证)圣托马斯大学毕业证如何办理
yfuwd
 

Recently uploaded (20)

What Outdoor Adventures Await Young Adults in Montreal's Surrounding Nature
What Outdoor Adventures Await Young Adults in Montreal's Surrounding NatureWhat Outdoor Adventures Await Young Adults in Montreal's Surrounding Nature
What Outdoor Adventures Await Young Adults in Montreal's Surrounding Nature
 
Ready for Cold Weather Rafting Here's What to Wear to Stay Comfortable!
Ready for Cold Weather Rafting Here's What to Wear to Stay Comfortable!Ready for Cold Weather Rafting Here's What to Wear to Stay Comfortable!
Ready for Cold Weather Rafting Here's What to Wear to Stay Comfortable!
 
How To Change Your Name On American Airlines Aadvantage.pptx
How To Change Your Name On American Airlines Aadvantage.pptxHow To Change Your Name On American Airlines Aadvantage.pptx
How To Change Your Name On American Airlines Aadvantage.pptx
 
在线办理(BU毕业证书)波士顿大学毕业证录取通知书一模一样
在线办理(BU毕业证书)波士顿大学毕业证录取通知书一模一样在线办理(BU毕业证书)波士顿大学毕业证录取通知书一模一样
在线办理(BU毕业证书)波士顿大学毕业证录取通知书一模一样
 
Un viaje a Argentina updated xxxxxxxxxxx
Un viaje a Argentina updated xxxxxxxxxxxUn viaje a Argentina updated xxxxxxxxxxx
Un viaje a Argentina updated xxxxxxxxxxx
 
Nature of the task 1. write a paragraph about your trip to dubai and what ar...
Nature of the task  1. write a paragraph about your trip to dubai and what ar...Nature of the task  1. write a paragraph about your trip to dubai and what ar...
Nature of the task 1. write a paragraph about your trip to dubai and what ar...
 
Top 10 Tourist Places in South India to Explore.pdf
Top 10 Tourist Places in South India to Explore.pdfTop 10 Tourist Places in South India to Explore.pdf
Top 10 Tourist Places in South India to Explore.pdf
 
How To Change A Name On American Airlines Ticket.pptx
How To Change A Name On American Airlines Ticket.pptxHow To Change A Name On American Airlines Ticket.pptx
How To Change A Name On American Airlines Ticket.pptx
 
Explore Architectural Wonders and Vibrant Culture With Naples Tours
Explore Architectural Wonders and Vibrant Culture With Naples ToursExplore Architectural Wonders and Vibrant Culture With Naples Tours
Explore Architectural Wonders and Vibrant Culture With Naples Tours
 
How Do I Plan a Kilimanjaro Climb? 7 Essential Tips Revealed.pdf
How Do I Plan a Kilimanjaro Climb? 7 Essential Tips Revealed.pdfHow Do I Plan a Kilimanjaro Climb? 7 Essential Tips Revealed.pdf
How Do I Plan a Kilimanjaro Climb? 7 Essential Tips Revealed.pdf
 
Golden Gate Bridge: Magnificent Architecture in San Francisco | CIO Women Mag...
Golden Gate Bridge: Magnificent Architecture in San Francisco | CIO Women Mag...Golden Gate Bridge: Magnificent Architecture in San Francisco | CIO Women Mag...
Golden Gate Bridge: Magnificent Architecture in San Francisco | CIO Women Mag...
 
Discovering Egypt A Step-by-Step Guide to Planning Your Trip.ppt
Discovering Egypt A Step-by-Step Guide to Planning Your Trip.pptDiscovering Egypt A Step-by-Step Guide to Planning Your Trip.ppt
Discovering Egypt A Step-by-Step Guide to Planning Your Trip.ppt
 
What Challenges Await Beginners in Snowshoeing
What Challenges Await Beginners in SnowshoeingWhat Challenges Await Beginners in Snowshoeing
What Challenges Await Beginners in Snowshoeing
 
Excursions in Tahiti Island Adventure
Excursions in Tahiti Island AdventureExcursions in Tahiti Island Adventure
Excursions in Tahiti Island Adventure
 
Discover the Magic of Ibiza An Unforgettable Boat Trip
Discover the Magic of Ibiza An Unforgettable Boat TripDiscover the Magic of Ibiza An Unforgettable Boat Trip
Discover the Magic of Ibiza An Unforgettable Boat Trip
 
Un viaje a Buenos Aires y sus alrededores
Un viaje a Buenos Aires y sus alrededoresUn viaje a Buenos Aires y sus alrededores
Un viaje a Buenos Aires y sus alrededores
 
The Ultimate Travel Guide to Hawaii Island Hopping in 2024
The Ultimate Travel Guide to Hawaii Island Hopping in 2024The Ultimate Travel Guide to Hawaii Island Hopping in 2024
The Ultimate Travel Guide to Hawaii Island Hopping in 2024
 
Wayanad-The-Touristry-Heaven to the tour.pptx
Wayanad-The-Touristry-Heaven to the tour.pptxWayanad-The-Touristry-Heaven to the tour.pptx
Wayanad-The-Touristry-Heaven to the tour.pptx
 
bangalore metro routes, stations, timings
bangalore metro routes, stations, timingsbangalore metro routes, stations, timings
bangalore metro routes, stations, timings
 
一比一原版(UST毕业证)圣托马斯大学毕业证如何办理
一比一原版(UST毕业证)圣托马斯大学毕业证如何办理一比一原版(UST毕业证)圣托马斯大学毕业证如何办理
一比一原版(UST毕业证)圣托马斯大学毕业证如何办理
 

Los Angeles R users group - July 12 2011 - Part 2

  • 1. Turbocharge your R Rob Zinkov July 12th, 2011 Rob Zinkov () Turbocharge your R July 12th, 2011 1 / 23
  • 2. Outline 1 Introduction 2 .C 3 .Call 4 Rcpp Rob Zinkov () Turbocharge your R July 12th, 2011 2 / 23
  • 3. Introduction What is the point of this talk? Show you how to speed up your R code Rob Zinkov () Turbocharge your R July 12th, 2011 3 / 23
  • 4. Introduction Caveats • Please try to optimize your R code first • Some of these mechanisms will make coding harder Rob Zinkov () Turbocharge your R July 12th, 2011 4 / 23
  • 5. .C • This is the basic mechanism • Explicitly copies the data into C • Only accepts integer vectors Rob Zinkov () Turbocharge your R July 12th, 2011 5 / 23
  • 6. .C Step 1. Put function in file (foo.c) void foo(int *nin, double *x) { int n = nin[0]; int i; for (i=0; i<n; i++) x[i] = x[i] * x[i]; } Rob Zinkov () Turbocharge your R July 12th, 2011 6 / 23
  • 7. .C • Note this is a void function • Note arguments are passed in as pointers • Try to limit one function per file Rob Zinkov () Turbocharge your R July 12th, 2011 7 / 23
  • 8. .C Step 2. Compile file with R $ R CMD SHLIB foo.c Rob Zinkov () Turbocharge your R July 12th, 2011 8 / 23
  • 9. .C Step 3. Load into R > dyn.load("foo.so") Rob Zinkov () Turbocharge your R July 12th, 2011 9 / 23
  • 10. .C Step 4. Call your code .C("foo", n=as.integer(5), x=as.double(rnorm(5))) Rob Zinkov () Turbocharge your R July 12th, 2011 10 / 23
  • 11. .C • Arguments to .C are name of function followed by arguments • Arguments must be the right type • Touching C code runs risks of segfaults Rob Zinkov () Turbocharge your R July 12th, 2011 11 / 23
  • 12. .Call Why? • Less copying of data structures (lower memory) • Access more of R data structures • Access more kinds of R data • Do more in C Rob Zinkov () Turbocharge your R July 12th, 2011 12 / 23
  • 13. .Call .Call code #include <R.h> #include <Rinternals.h> #include <Rmath.h> SEXP vecSum(SEXP Rvec){ int i, n; double *vec, value = 0; vec = REAL(Rvec); n = length(Rvec); for (i = 0; i < n; i++) value += vec[i]; printf("The value is: %4.6f n", value); return R_NilValue; } Rob Zinkov () Turbocharge your R July 12th, 2011 13 / 23
  • 14. .Call R CMD SHLIB vecSum.c dyn.load("vecSum.so") .Call("vecSum", rnorm(10)) Rob Zinkov () Turbocharge your R July 12th, 2011 14 / 23
  • 15. .Call SEXP ab(SEXP Ra, SEXP Rb){ int i, a, b; SEXP Rval; Ra = coerceVector(Ra, INTSXP); Rb = coerceVector(Rb, INTSXP); a = INTEGER(Ra)[0]; b = INTEGER(Rb)[0]; PROTECT(Rval = allocVector(INTSXP, b - a + 1)); for (i = a; i <= b; i++) INTEGER(Rval)[i - a] = i; UNPROTECT(1); return Rval; } Rob Zinkov () Turbocharge your R July 12th, 2011 15 / 23
  • 16. .Call Since memory is shared explicit care must be taken not to collide with R Rob Zinkov () Turbocharge your R July 12th, 2011 16 / 23
  • 17. Rcpp Why? • Use C++ instead of C • Ability to use objects to represent R more naturally • Easier to load code Rob Zinkov () Turbocharge your R July 12th, 2011 17 / 23
  • 18. Rcpp src <- ’ IntegerVector tmp(clone(x)); double rate = as< double >(y); int tmpsize = tmp.size(); RNGScope scope; for (int ii =0; ii < tmpsize; ii++) { tmp(ii) = Rf_rbinom(tmp(ii), rate); }; return tmp; ’ require(inline) ## compile the function, inspect the process with verbose=T testfun2 = cxxfunction(signature(x=’integer’, y=’numeric’), src, plugin=’Rcpp’, verbose=T) Rob Zinkov () Turbocharge your R July 12th, 2011 18 / 23
  • 19. Rcpp require(inline) testfun = cxxfunction( signature(x="numeric", i="integer"), body = ’ NumericVector xx(x); int ii = as<int>(i); xx = xx * ii; return( xx ); ’, plugin="Rcpp") testfun(1:5, 3) Rob Zinkov () Turbocharge your R July 12th, 2011 19 / 23
  • 20. Rcpp Conclusions It is fairly easy to make R faster Rob Zinkov () Turbocharge your R July 12th, 2011 20 / 23
  • 21. Rcpp Conclusions Now go make your R code faster Rob Zinkov () Turbocharge your R July 12th, 2011 21 / 23
  • 22. Rcpp References • http://www.stat.umn.edu/ charlie/rc/ • http://helmingstay.blogspot.com/2011/06/efficient-loops-in-r- complexity-versus.html • http://www.sfu.ca/ sblay/R-C-interface.ppt • http://www.biostat.jhsph.edu/ bcaffo/statcomp/files/dotCall.pdf • http://cran.r-project.org/web/packages/Rcpp/vignettes/Rcpp- quickref.pdf • http://www.jstatsoft.org/v40/i08/paper Rob Zinkov () Turbocharge your R July 12th, 2011 22 / 23
  • 23. Rcpp Questions? Rob Zinkov () Turbocharge your R July 12th, 2011 23 / 23