Error Handling in R Made Easy

Deepanshu Bhalla 1 Comment

In R, the try() function is used to handle errors and exceptions that may occur during the execution of code. It allows you to execute a block of code and catch any errors that might arise, preventing the code from stopping and allows you to handle the errors efficiently.

Syntax of try() function

The basic syntax of try() is as follows:

result <- try(expr, silent = FALSE)

If you want the error message not to be shown, use the silent = TRUE argument. For example, try(expr, silent = TRUE).

The inherits() function is used to check if an object belongs to a particular class. In this context, you can use the function to check if the result is an error object.

Here's an example of how to use try() and inherits() together for error handling in R:

Example 1: Error Handling in R Function

The following function "divide_numbers" is designed to divide two numbers x and y. It includes error handling to handle cases where x or y is not a numeric value, such as a character value.

divide_numbers <- function(x, y) {
  result <- try(x / y, silent = TRUE)
  if (inherits(result, 'try-error')) {
    cat("It seems either x or y is a character value.", "Error is - ", result)
    return(NA)
  }
  return(result)
}
result2 <- divide_numbers(10, 2)
print(result2) # Output: 5

Let's test the function with invalid inputs. In this example, we are using "a" as a denominator for division.

result2 <- divide_numbers(10, "a")
print(result2) # Output: NA

Message: It seems either x or y is a character value. Error is - Error in x/y : non-numeric argument to binary operator.

Here's how the above function works:

  1. The function attempts to divide x by y using the try function with silent = TRUE to suppress error messages.
  2. If the division is successful (i.e., no error occurs), it returns the result of the division.
  3. If an error occurs during the division (e.g., due to x or y being non-numeric or division by zero), the try function will return an error object.
  4. The function then checks if the result is an error object using the inherits function.
  5. If an error is detected, it will print a message indicating that either x or y is a character value, and it will display the error message returned by the try function.
  6. Finally, the function returns NA to indicate that an error occurred during the division.
Example 2: Error Handling in Building Predictive Model

The following code finds the optimal mtry value through tuneRF and then builds a random forest model using the best mtry value if successful. If tuneRF fails to find the optimal value, it builds a random forest model with a default value of mtry.

# Assuming mydata is your R dataframe and target variable is the 3rd column of the dataframe.
mtry <- try(tuneRF(mydata[, -3], mydata[,3], ntreeTry=100, stepFactor=1.5, improve=0.01))

if (!inherits(mtry, "try-error")) {
  best.m <- mtry[mtry[, 2] == min(mtry[, 2]), 1]
  rf <- randomForest(ID ~ ., data=mydata, mtry=best.m, importance=TRUE, ntree=100)
} else {
  rf <- randomForest(ID ~ ., data=mydata, importance=TRUE, ntree=100)
}
Related Posts
Spread the Word!
Share
About Author:
Deepanshu Bhalla

Deepanshu founded ListenData with a simple objective - Make analytics easy to understand and follow. He has over 10 years of experience in data science. During his tenure, he worked with global clients in various domains like Banking, Insurance, Private Equity, Telecom and HR.

Post Comment 1 Response to "Error Handling in R Made Easy"
  1. Very usefull. Thanx. Will greatly benefit from these pages.

    ReplyDelete
Next → ← Prev