deSolve package, ode(). How to check what is inside.

Hello,
Is there a way, how to check what is the function ode() inside package deSolve doing? How is it exactly making the calculations?

If the library is attached, try getAnywhere() function on your function of interest.
Also you can use debug() your function and then run it with some parameters to step through it in browser mode

1 Like

If the function is not compiled

library(deSolve)
ode
#> function (y, times, func, parms, method = c("lsoda", "lsode", 
#>     "lsodes", "lsodar", "vode", "daspk", "euler", "rk4", "ode23", 
#>     "ode45", "radau", "bdf", "bdf_d", "adams", "impAdams", "impAdams_d", 
#>     "iteration"), ...) 
#> {
#>     if (is.null(method)) 
#>         method <- "lsoda"
#>     if (is.list(method)) {
#>         if (!inherits(method, "rkMethod")) 
#>             stop("'method' should be given as string or as a list of class 'rkMethod'")
#>         out <- rk(y, times, func, parms, method = method, ...)
#>     }
#>     else if (is.function(method)) 
#>         out <- method(y, times, func, parms, ...)
#>     else if (is.complex(y)) 
#>         out <- switch(match.arg(method), vode = zvode(y, times, 
#>             func, parms, ...), bdf = zvode(y, times, func, parms, 
#>             mf = 22, ...), bdf_d = zvode(y, times, func, parms, 
#>             mf = 23, ...), adams = zvode(y, times, func, parms, 
#>             mf = 10, ...), impAdams = zvode(y, times, func, parms, 
#>             mf = 12, ...), impAdams_d = zvode(y, times, func, 
#>             parms, mf = 13, ...))
#>     else out <- switch(match.arg(method), lsoda = lsoda(y, times, 
#>         func, parms, ...), vode = vode(y, times, func, parms, 
#>         ...), lsode = lsode(y, times, func, parms, ...), lsodes = lsodes(y, 
#>         times, func, parms, ...), lsodar = lsodar(y, times, func, 
#>         parms, ...), daspk = daspk(y, times, func, parms, ...), 
#>         euler = rk(y, times, func, parms, method = "euler", ...), 
#>         rk4 = rk(y, times, func, parms, method = "rk4", ...), 
#>         ode23 = rk(y, times, func, parms, method = "ode23", ...), 
#>         ode45 = rk(y, times, func, parms, method = "ode45", ...), 
#>         radau = radau(y, times, func, parms, ...), bdf = lsode(y, 
#>             times, func, parms, mf = 22, ...), bdf_d = lsode(y, 
#>             times, func, parms, mf = 23, ...), adams = lsode(y, 
#>             times, func, parms, mf = 10, ...), impAdams = lsode(y, 
#>             times, func, parms, mf = 12, ...), impAdams_d = lsode(y, 
#>             times, func, parms, mf = 13, ...), iteration = iteration(y, 
#>             times, func, parms, ...))
#>     return(out)
#> }
#> <bytecode: 0x7ff489688a48>
#> <environment: namespace:deSolve>

Created on 2020-02-23 by the reprex package (v0.3.0)

3 Likes

Oh yes, I forgot that way. :laughing:

1 Like

Inside RStudio IDE, when cursor is on a function name, you can click on Code > Go to function definition or use Show source code F2 key shortcut to open the Function definition inside the IDE source pane. You can easily navigate through functions this way. See RStudio IDE cheatsheet.

Hope it helps.

Also, if your question's been answered (even by you!), would you mind choosing a solution? It helps other people see which questions still need help, or find solutions if they have similar problems. Here’s how to do it:

1 Like

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.