Data Manipulation in R: 'X' must be atomic

I have imported a file with headings and numbers in multiple columns using the following command.irs_data <- read.csv(file="10incyallnoagi.csv")

I would like to divide the values in 1 column by another and then determine the highest 3 values.

 salary_var <- c(irs_data[13]/irs_data[12]) head(sort(new_var, decreasing=TRUE), 3) 

I keep getting the constant error. As a beginner to R, what does it mean "x must be atomic" in this context.

Error in sort.int(x, na.last = na.last, decreasing = decreasing, ...) : 'x' must be atomic
6

2 Answers

The problem is that salary_var is a list containing a single-element. The call to sort() is then trying to sort a list, not an atomic element. You can see that salary_var is a list by running str(salary_var). If you omit the c(), you'll instead end up with a data frame with a single column, which gives the same problem.

Two simple solutions:

To sort the values in the element of the list, use

head(sort(salary_var[[1]], decreasing=TRUE), 3) 

where the [[1]] selects the first element of the list and sorts the values within it.

Alternatively, create salary_var explicitly as a numeric vector instead:

salary_var <- (irs_data[13]/irs_data[12])[[1]]

One note: in your post, you wrote new_var instead of salary_var in your call to sort() which may confuse other readers.

you can use the unlist() to convert the list to a vector as the sort() function takes vector form for sorting. so just use

head(sort(unlist(new_var), decreasing=TRUE), 3) 

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

You Might Also Like