| utilities {inline} | R Documentation |
Printing, reading and writing compiled function objects
Description
moveDLL moves the DLL used by a compiled function to a user defined
location.
writeCFunc saves a CFunc object after the DLL has been moved to
the desired location using moveDLL.
readCFunc reads a CFunc object that has been saved using
writeCFunc.
The print and code methods respectively print the entire
object or only the code parts.
Usage
moveDLL(x, ...)
## S4 method for signature 'CFunc'
moveDLL(x, name, directory, unload = FALSE, overwrite = FALSE, verbose = FALSE)
writeCFunc(x, file)
readCFunc(file)
## S4 method for signature 'CFunc'
print(x)
## S4 method for signature 'CFuncList'
print(x)
## S4 method for signature 'CFunc'
code(x, linenumbers = TRUE)
## S4 method for signature 'CFuncList'
code(x, linenumbers = TRUE)
Arguments
x |
A |
name |
The base of the file name that the DLL should be moved to. The file name extension will depend on the operating system used |
directory |
The directory that the DLL should be written to |
unload |
In case the new path constructed from |
overwrite |
In case there is a file at the new path constructed from
|
verbose |
Should we print a message stating where the DLL was copied if the operation was successful? |
file |
The file path for writing and reading the object generated by
|
linenumbers |
If |
... |
May be used in future methods |
Details
If you move the DLL to a user defined location with moveDLL, this will
keep an on-disk copy of the DLL which will prevent it from being lost at
session termination - unless written to the session tempdir.
Saving and reloading the CFunc object with standard tools like
save or saveRDS will still loose the pointer to
the DLL. However, when the DLL has been moved using moveDLL,
CFunc objects can be saved by writeCFunc and restored by
readCFunc.
Value
Function readDynLib returns a CFunc object.
Function writeDynLib returns the name of the .CFunc file that
was created.
Note
The code of a
CFuncorCFuncListobjectxcan be extracted (rather than printed), using:x@code.To write the code to a file (here called
"fn"), without the new-line character"\n":write (strsplit(x, "\n")[[1]], file = "fn")
Author(s)
Karline Soetaert and Johannes Ranke
See Also
Examples
x <- as.numeric(1:10)
n <- as.integer(10)
code <- "
integer i
do 1 i=1, n(1)
1 x(i) = x(i)**3
"
cubefn <- cfunction(signature(n="integer", x="numeric"), code,
convention=".Fortran")
code(cubefn)
cubefn(n, x)$x
## Not run:
# The following code is exempted from the automated tests of example code, as
# it writes to the users home directory.
# The following writes the DLL, e.g. cubefn.so on Linux/Unix or cubefn.dll
# on Windows
moveDLL(cubefn, name = "cubefn", directory = "~")
path <- file.path("~", "cubefn.rda")
writeCFunc(cubefn, path)
rm(cubefn)
# Now you can start a fresh R session and load the function
library(inline)
path <- file.path("~", "cubefn.rda")
cfn <- readCFunc(path)
cfn(3, 1:3)$x
## End(Not run)