
#Source unpack 2 missing interface how to
Input validation talks about the importance of input validation so that your C function doesn’t crash R.įinding the C source for a function concludes the chapter by showing you how to find the C source code for internal and primitive R functions. You need to know this because the distinction between pairlists and list is more important in C than R. Pairlists shows you how to work with pairlists. OutlineĬalling C shows the basics of creating and calling C functions with the inline package.Ĭ data structures shows how to translate data structure names from R to C.Ĭreating and modifying vectors teaches you how to create, modify, and coerce vectors in C. The Rcpp API protects you from many of the historical idiosyncracies of the R API, takes care of memory management for you, and provides many useful helper methods. I do not recommend using C for writing new high-performance code. Rinternals <- file.path( R.home( "include"), "Rinternals.h")Īll functions are defined with either the prefix Rf_ or R_ but are exported without it (unless #define R_NO_REMAP has been used). It’s easiest to find and display this file from within R: To see R’s complete C API, look at the header file Rinternals.h. C interface, the old API defined in Rdefines.h, or rarely used language features.

The contents of this chapter draw heavily from Section 5 (“System and foreign language interfaces”) of Writing R extensions, but focus on best practices and modern tools. You’ll need a little patience, but it is possible to read R’s C source code, and you will learn a lot doing it. You’ll need some basic C knowledge, which you can get from a standard C text (e.g., The C Programming Language by Kernigan and Ritchie), or from Rcpp. It’s useful to be able to figure out how those functions work, so this chapter will introduce you to R’s C API. However, many base R functions, and many functions in older packages, are written in C.

Reading R’s source code is an extremely powerful technique for improving your programming skills. You’re reading the first edition of Advanced R for the latest on this topic, see the R internals documentation.
