name: This can either give the name of the user function or be a simple R function that you wish to convert to C. If you have rxode2 convert the R function to C, the name of the function will match the function name provided and the number of arguments will match the R function provided. Hence, if you are providing an R function for conversion to C, the rest of the arguments are implied.
args: This gives the arguments of the user function
cCode: This is the C-code for the new function
Examples
# Right now rxode2 is not aware of the function fun# Therefore it cannot translate it to symengine or# Compile a model with it.try(rxode2("a=fun(a,b,c)"))# Note for this approach to work, it cannot interfere with C# function names or reserved rxode2 special terms. Therefore# f(x) would not work since f is an alias for bioavailability.fun <- "
double fun(double a, double b, double c){ return a*a+b*a+c;}" # C-code for functionrxFun("fun", c("a","b","c"), fun)## Added function# Now rxode2 knows how to translate this function to symenginerxToSE("fun(a,b,c)")# And will take a central difference when calculating derivativesrxFromSE("Derivative(fun(a,b,c),a)")## Of course, you could specify the derivative table manuallyrxD("fun", list(function(a, b, c){ paste0("2*", a,"+", b)},function(a, b, c){ return(a)},function(a, b, c){ return("0.0")}))rxFromSE("Derivative(fun(a,b,c),a)")# You can also remove the functions by `rxRmFun`rxRmFun("fun")# you can also use R functions directly in rxode2gg <-function(x, y){ x + y
}f <- rxode2({ z = gg(x, y)})e <- et(1:10)|> as.data.frame()e$x <-1:10e$y <-21:30rxSolve(f, e)# Note that since it touches R, it can only run single-threaded.# There are also requirements for the function:## 1. It accepts one value per argument (numeric)## 2. It returns one numeric value# If it is a simple function (like gg) you can also convert it to C# using rxFun and load it into rxode2rxFun(gg)rxSolve(f, e)# to stop the recompile simply reassign the functionf <- rxode2(f)rxSolve(f, e)rxRmFun("gg")rm(gg)rm(f)# You can also automatically convert a R function to R code (and# calculate first derivatives)fun <-function(a, b, c){ a^2+b*a+c
}rxFun(fun)# You can see the R code if you want with rxCmessage(rxC("fun"))# you can also remove both the function and the# derivatives with rxRmFun("fun")rxRmFun("fun")