How to Solve R Error: argument is of length zero

by | Programming, R, Tips

This error occurs if you try to perform a logical comparison in an if-statement with a zero-length variable. This error can happen if you define a variable with zero length or if you attempt to access a column of a data frame that does not exist.

You can solve the error by assigning a non-zero value to a variable or accessing a column that exists in a data frame.

This tutorial will go through the error in detail and how to solve it with code examples.


Example #1: Vector of Length Zero

Let’s look at an example of using a vector of length zero in an if statement.

First, we will create a numeric variable with a length of zero using the double() function which is identical to the numeric() function.

num <- double()

Next, we will check if the numeric variable is less than 7 in an if statement. If the if statement evaluates to TRUE then the R interpreter prints the number.

if (num < 7) {

   num

}

Let’s run the code to see what happens:

Error in if (num < 7) { : argument is of length zero

The error occurs because the variable num has a length of zero:

print(length(num))
0

Solution

We can solve the error by using a numeric variable with a non-zero value. Let’s look at the revised code:

vec <- 5

if (vec < 7){

    vec

}

Let’s run the code to get the result:

5

We can check if a value is of length zero using the isTRUE function.

isTRUE(x) is equivalent to:

is.logical(x) && length(x) == 1 && !is.na(x) && x}

The use of isTRUE in an if statement, for example if(isTRUE(condition)) may be preferable to if(cond) as the if statement with isTRUE evaluates to FALSE for zero-length variables or NAs.

num <- numeric()
isTRUE(num)
FALSE

Let’s look at the revised code with the if-statement.

num <- numeric()

if (isTRUE(num) && num < 7){

    num

}

If we run the code the R interpreter will not print the value of num.

Example #2: Non-existent Data frame Column

We can also encounter this error by trying to evaluate a condition based on a non-existent data frame column.

Let’s look at an example of a data frame with three columns.

X <- c(23, 41, 55, 32, 26, 78)

Y <- c(10, 11, 100, 44, 22, 9)

Z <- c(61, 99, 55, 42, 36, 1)

df <- data.frame(X, Y, Z)

Next, we will define a for loop to iterate of the rows in the data frame and compare the numeric values between two of the columns in an if statement. If the numeric values for the two columns are equal then we print the value to the console.

for (i in 1:nrow(df))

if(df[i,"X"] == df[i, "A"]) {

    df[i, "X"]

}

Let’s run the code to see what happens:

Error in if (df[i, "X"] == df[i, "A"]) { : argument is of length zero

The error occurs because the column “A” does not exist. The length of a non-existent column is zero.

Solution

We can solve the error by using a column name that exists. We can get the column names of a data frame using the colnames() function.

colnames(df)
"X" "Y" "Z"

Let’s look at the revised code:

X <- c(23, 41, 55, 32, 26, 78)

Y <- c(10, 11, 100, 44, 22, 9)

Z <- c(61, 99, 55, 42, 36, 1)

df <- data.frame(X, Y, Z)

for (i in 1:nrow(df))

if(df[i,"X"] == df[i, "Z"]) {

    print(df[i, "X"])

}

We changed the if-statement to compare values in column “X” and “Z“. Let’s run the code to find the value that exists in both columns:

55

Summary

Congratulations on reading to the end of this tutorial!

For further reading on R-related errors, go to the articles: 

For more on using colnames in R, go to the article:

Go to the online courses page on R to learn more about coding in R for data science and machine learning.

Have fun and happy researching!

Research Scientist at Moogsoft | + posts

Suf is a research scientist at Moogsoft, specializing in Natural Language Processing and Complex Networks. Previously he was a Postdoctoral Research Fellow in Data Science working on adaptations of cutting-edge physics analysis techniques to data-intensive problems in industry. In another life, he was an experimental particle physicist working on the ATLAS Experiment of the Large Hadron Collider. His passion is to share his experience as an academic moving into industry while continuing to pursue research. Find out more about the creator of the Research Scientist Pod here and sign up to the mailing list here!