Debugging is the process of finding and fixing errors in your code. R provides a few tools to help with this:
Here’s an example of how you might use these tools:
troubled_function <- function() {
x <- log("a")
return(x)
}
debug(troubled_function)
troubled_function()
When you run this code, R will pause at the beginning of
troubled_function(), and you can step through the function
one line at a time by pressing Enter.
Understanding and effectively leveraging R’s error handling and debugging tools can greatly speed up the process of writing and refining your code.
The traceback() function is particularly useful for
understanding the sequence of events that led to an error. When you run
traceback() immediately after an error occurs, it shows you
the sequence of function calls that led up to the error.
Consider the following example:
f1 <- function() {
f2()
}
f2 <- function() {
f3()
}
f3 <- function() {
log("a")
}
f1()
traceback()
In this case, traceback() would show you that the error
occurred in f3(), which was called by f2(),
which was called by f1().
R provides an interactive debugging tool, recover().
When an error occurs, recover() gives you the opportunity
to modify the error and resume computation. You can access
recover() by setting options(error = recover).
Here’s an example:
options(error = recover)
f1 <- function() {
f2()
}
f2 <- function() {
f3()
}
f3 <- function() {
log("a")
}
f1()
Running this code will give you an interactive menu where you can choose which environment to enter and modify the error.
RStudio, a popular integrated development environment (IDE) for R, also provides several helpful debugging tools. These include:
These features can make the debugging process more visual and interactive.