R error in eval(predvars, data, env) : numeric ‘envir’ arg not of length one

If you do any programming you will come across error messages. Here we have an error message that comes from the modeling data set. It is a problem related to the formatting of data for the predict() function.

When Does This Error Occur?

The error occurs when you improperly enter data into the predict() function. You use this function for predicting the results from a model based on your data. The predict() function has three parameters. A model, data frame and an optional parameter of an interval. The model is, of course, the model that you are testing. The data frame is the data you are using to test the model. The interval calculates a range with a margin of ninety-five percent. Here is a section of code that illustrates the problem.

# source: error in eval(predvars, data, env) : numeric 'envir' arg not of length one 
> df = read.table(text = '
 +       TRip   Distance  Duration
 + 1     "#3"  2027.072  081.082
 + 2     "#4"  3476.802  139.072
 + 3     "#5"  4622.174  184.886
 + 4     "#6"  4214.416  168.576
 + 5     "#7"  6553.586  262.143
 + 6     "#8"  7123.162  284.926
 + 7     "#9"  7987.369  319.494', header=TRUE)
 > 
 > model = lm(df$Duration ~ df$Distance)
 > 
 > x = predict(model, df$Distance)
   Error in eval(predvars, data, env) : numeric 'envir' arg not of length one

Running this code produces the error message, and the problem can be traced down to using “df$Distance” directly in the predict() function when it is not a data frame.

But Why?

error in eval(predvars data env) randomfores terror in eval(predvars, data, env) lm error in eval predvars data env object quarter not found error in eval(predvars data env) object not found glm error in eval predvars data env object events not found error in eval(predvars, data, env) : numeric 'envir' arg not of length one error in eval(predvars, data, env) : invalid 'envir' argument of type 'character'error error in eval predvars data env object ps not found

The reason this error message occurs is that the predict() function is looking for a data frame in the second position, however, “df$Distance” is simply a vector produced by extracting the second column from the data frames “df” such that you are entering the wrong type of data, this is what causes the function to result in an error message. Put another way you are giving the function data that is not correctly formatted and it is responding by telling you that cannot do it. Unfortunately, like a lot of error messages, the exact wording is not always helpful.

How Do I Fix It?

Fixing this error is simply a matter of converting vector “df$Distance” into a data frame so that it will be accepted by the predict() function. You can do this both inside and outside of the predict() function. Here is a redo of our example code, entered properly so that it does not produce the error.

# solution: error in eval(predvars, data, env) : numeric 'envir' arg not of length one  
> df = read.table(text = '
 +       TRip   Distance  Duration
 + 1     "#3"  2027.072  081.082
 + 2     "#4"  3476.802  139.072
 + 3     "#5"  4622.174  184.886
 + 4     "#6"  4214.416  168.576
 + 5     "#7"  6553.586  262.143
 + 6     "#8"  7123.162  284.926
 + 7     "#9"  7987.369  319.494', header=TRUE)
 > 
 > model = lm(df$Duration ~ df$Distance)
 >x = predict(model, data.frame(df$Distance))

What distinguishes this version from the one that produces the error message is putting “df$Distance” through the data.frame() function.

> predict(model, df$Distance)
> predict(model, data.frame(df$Distance))

As you can see here the key difference is the addition of the data.frame() function.

For: error in eval(predvars, data, env) : numeric ‘envir’ arg not of length one

We hope this quick tutorial on the error in eval(predvars was helpful, and encourage you to check out more of our site for all of your R programming needs!