Learn R Programming

base (version 3.3)

CallExternal: Modern Interfaces to C/C++ code

Description

Functions to pass Robjects to compiled C/C++ code that has been loaded into R.

Usage

.Call(.NAME, ..., PACKAGE)
.External(.NAME, ..., PACKAGE)

Arguments

.NAME
a character string giving the name of a C function, or an object of class "NativeSymbolInfo", "RegisteredNativeSymbol" or "NativeSymbol" referring to such a name.
...
arguments to be passed to the compiled code. Up to 65 for .Call.
PACKAGE
if supplied, confine the search for a character string .NAME to the DLL given by this argument (plus the conventional extension, ‘.so’, ‘.dll’, ...).

This argument follows ... and so its name cannot be abbreviated.

This is intended to add safety for packages, which can ensure by using this argument that no other package can override their external symbols, and also speeds up the search (see ‘Note’).

Value

  • An Robject constructed in the compiled code.

Header files for external code

Writing code for use with these functions will need to use internal R structures defined in ‘Rinternals.h’ and/or the macros in ‘Rdefines.h’.

Details

The functions are used to call compiled code which makes use of internal Robjects, passing the arguments to the code as a sequence of Robjects. They assume C calling conventions, so can usually also be used of C++ code.

For details about how to write code to use with these functions see the chapter on System and foreign language interfaces in the Writing RExtensions manual. They differ in the way the arguments are passed to the C code: .External allows for a variable number of arguments.

These functions are primitive, and .NAME is always matched to the first argument supplied (which should not be named). For clarity, avoid using names in the arguments passed to ... that match or partially match .NAME.

References

Chambers, J. M. (1998) Programming with Data. A Guide to the S Language. Springer. (.Call.)

See Also

dyn.load, .C, .Fortran.

The Writing R Extensions manual.