doggysaywhat doggysaywhat - 1 year ago 156
R Question

colMeans function in R and running into problems with columns of size 1

I had a question regarding the colMeans function. Is there a version of this that will not return an error when it runs into a column of length one? For example


[1] 2.0 3.5

But for this one


Error in colMeans(temp2) :
'x' must be an array of at least two dimensions

But, if I apply the function mean to each column it properly comes up with the value of 2 and 2.

I wrote a function to do this


which gives the same results as colMeans.

I've heard that colMeans is supposed to be much faster than this method. So, is there a version of colMeans that will work when my column is of size 1.

Answer Source

As @Paul points out, colMeans expects "an array of two or more dimensions" for its x argument (from ?colMeans). But temp2 is not an array

# [1] FALSE

temp2 can be made into an array:

(tempArray <- array(temp2, dim = c(1, 2)))
#      [,1] [,2]
# [1,]    2    2

# [1] 2 2

Perhaps temp2 came from subsetting an array, such as

array(temp2, dim = c(2, 2))[1, ]

But this is not an array. To keep it as an array, add drop = FALSE inside the brackets:

array(temp2, dim = c(2, 2))[1, , drop = FALSE]
#      [,1] [,2]
# [1,]    2    2

Then you can use colMeans on the subsetted array.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download