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.
Table of contents
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:
- How to Solve R Error in sort.int(x, na.last = na.last, decreasing = decreasing, …) : ‘x’ must be atomic
- How to Solve R Error: the condition has length > 1
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!
Suf is a senior advisor in data science with deep expertise in Natural Language Processing, Complex Networks, and Anomaly Detection. Formerly a postdoctoral research fellow, he applied advanced physics techniques to tackle real-world, data-heavy industry challenges. Before that, he was a particle physicist at the ATLAS Experiment of the Large Hadron Collider. Now, he’s focused on bringing more fun and curiosity to the world of science and research online.