glm2c {glm.deploy} | R Documentation |
The glm2c()
function is used to generate source code in C language
implementing a given glm predictive model. It implements the following two functions;
the glm_xxx_response() and glm_xxx_link(), where xxx stands for the name of the target variable
of the glm object.
After the invocation of the glm2c()
function two files are generated:
A .c file with the two scoring functions.
An .h file with the prototypes of the two functions of the .c file.
glm2c(model, filename = NULL, path = NULL)
model |
A fitted object of class "glm". |
filename |
OPTIONAL The name of the output file(s), the default filenames are "glm_xxx.c" and "glm_xxx.h", where xxx is the target variable's name. |
path |
The directory path where files are going to be saved. |
All numeric variables used as input to the glm object are treated as doubles, whereas factor variables are treated as strings.
Oscar Castro-Lopez, Ines Vega-Lopez
# Example with the iris dataset with a Logical target and numeric variables, # using the binomial family and the logit link function data(iris) iristest = iris iristest$Virginica = ifelse(iristest$Species == 'virginica', TRUE,FALSE) iristest$Species = NULL # Load Package library(glm.deploy) # For repeatable results set.seed(123) # Generate the fitted glm object m = glm(Virginica ~ ., family = binomial(logit), data=iristest) # Call the glm2c() function with default filename glm2c(m,,tempdir()) # Call the glm2c() function with custom filename glm2c(m,'my_glm_virginica', tempdir()) # The glm2c() function generates the files: "glm_virginica.c" and # "glm_virginica.h" ## Not run: ---------------Contents of the "glm_virgninica.c" file--------------- #include <stdlib.h> #include <stdio.h> #include <string.h> #include <math.h> double glm_virginica_link(double sepal_length, double sepal_width, double petal_length, double petal_width){ double new_sepal_length = -2.46522019518341 * sepal_length; double new_sepal_width = -6.68088701405762 * sepal_width; double new_petal_length = 9.4293851538836 * petal_length; double new_petal_width = 18.2861368877881 * petal_width; return -42.6378038127854+new_sepal_length+ new_sepal_width+ new_petal_length+ new_petal_width; } double glm_virginica_response(double sepal_length, double sepal_width, double petal_length, double petal_width){ return 1/(1+exp(-glm_virginica_link(sepal_length, sepal_width, petal_length, petal_width))); } ----End of Contents of the "glm_virgninica.c" file------------------ -------------------------------------------------------------------- -----Contents of the "glm_virgninica.h" file------------------------ double glm_virginica_link(double sepal_length, double sepal_width, double petal_length, double petal_width); double glm_virginica_response(double sepal_length, double sepal_width, double petal_length, double petal_width); -----End of Contents of the "glm_virgninica.h" file----------------- -------------------------------------------------------------------- Usage of the functions in another programs; 1) We need to add an include line #include "virginica_glm.h" to all source files that use library definitions. 2) Link the .c file with the library object file. gcc -c glm_virginica.c 3) The following is an example file "test.c" to call the functions and print the result: -------------------"test.c"--------------- #include <stdio.h> #include "glm_virgnica.h" //Added to call the scoring functions. int main(int argc, char *argv[]){ printf("%f\n",glm_virginica_link(5.7,2.5,5.0,2.0)); printf("%f\n",glm_virginica_response(5.7,2.5,5.0,2.0)); return 0; } ---------------End of "test.c"--------------- --------------------------------------------- 4) Compile the "test.c" file and link it to the glm_virginica shared library, we also need to add the "-lm" option to link it to the math.h library: gcc test.c -o test glm_virginica.o -lm 5) Finally Run the test.o program in linux: ./test ## End(Not run)