cppRcppOutOfLine.R

Plain text source: cppRcppOutOfLine.R


# -*- Mode:R; Coding:us-ascii-unix; fill-column:160 -*-

################################################################################################################################################################
##
# @file      cppRcppOutOfLine.R
# @author    Mitch Richling <https://www.mitchr.me>
# @Copyright Copyright 2015 by Mitch Richling.  All rights reserved.
# @brief     Define and use a C++ function right inside of R.@EOL
# @Keywords  c++ function inside r package r cran examples inline
#
# sourceCpp in Rcpp allows us to put a bit of code into an external C++ file.
#

################################################################################################################################################################
# Load library

library(Rcpp)

################################################################################################################################################################
# An external .cpp file has two C++ functions 'cppCat' and 'cppSum'.  We load, compile, and create an R wrappers for them.

Rcpp::sourceCpp('cppRcppOutOfLine.cpp')
R> print("HI -- I am some code in cppRcppOutOfLine.cpp")
[1] "HI -- I am some code in cppRcppOutOfLine.cpp"
################################################################################################################################################################
# Call the cppCat function just defined

cppCat(1:10, 2:11)
 [1]  1  2  3  4  5  6  7  8  9 10  2  3  4  5  6  7  8  9 10 11
################################################################################################################################################################
# Call the cppSum function just defined

cppSum(1:10)
[1] 55

The R session information (including the OS info, R version and all packages used):

    options(width=80)
    sessionInfo()
R version 3.3.0 (2016-05-03)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Debian GNU/Linux 8 (jessie)

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] graphics  grDevices datasets  utils     grid      stats     base     

other attached packages:
[1] Rcpp_0.12.5        RColorBrewer_1.1-2 reshape2_1.4.1     ggplot2_2.1.0     
[5] dplyr_0.4.3        data.table_1.9.6   gridExtra_2.2.1    knitr_1.13        
[9] lattice_0.20-33   

loaded via a namespace (and not attached):
 [1] assertthat_0.1   plyr_1.8.3       chron_2.3-47     R6_2.1.2        
 [5] gtable_0.2.0     DBI_0.4-1        formatR_1.4      magrittr_1.5    
 [9] evaluate_0.9     scales_0.4.0     highr_0.6        stringi_1.0-1   
[13] tools_3.3.0      stringr_1.0.0    munsell_0.4.3    parallel_3.3.0  
[17] colorspace_1.2-6 methods_3.3.0   
    Sys.time()
[1] "2016-07-09 20:07:33 CDT"