Re: [R] hiccup in apply?

From: Gavin Simpson <gavin.simpson_at_ucl.ac.uk>
Date: Fri 19 Jan 2007 - 17:22:44 GMT

On Fri, 2007-01-19 at 11:36 -0500, bogdan romocea wrote:
> Hello, I don't understand the behavior of apply() on the data frame below.
>
> test <-
> structure(list(Date = structure(c(13361, 13361, 13361, 13361,
> 13361, 13361, 13361, 13361, 13362, 13362, 13362, 13362, 13362,
> 13362, 13362, 13362, 13363, 13363, 13363, 13363, 13363, 13363,
> 13363, 13363, 13364, 13364, 13364, 13364, 13364, 13364, 13364,
> 13364, 13365, 13365, 13365, 13365, 13365, 13365, 13365, 13365,
> 13366, 13366, 13366, 13366, 13366, 13366, 13366, 13366, 13367,
> 13367), class = "Date"), RANK = as.integer(c(19, 7, 5, 4, 6,
> 3, 3, 4, 18, 7, 6, 4, 6, 3, 3, 4, 19, 7, 6, 4, 6, 3, 3, 4, 18,
> 6, 7, 4, 6, 3, 3, 4, 18, 6, 7, 4, 6, 3, 3, 4, 18, 6, 7, 4, 6,
> 3, 3, 4, 18, 6))), .Names = c("Date", "RANK"), row.names = c("1",
> "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
> "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24",
> "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35",
> "36", "37", "38", "39", "40", "41", "42", "43", "44", "45", "46",
> "47", "48", "49", "50"), class = "data.frame")
>
> #---fine
> > summary(test)
> Date RANK
> Min. :2006-08-01 Min. : 3.00
> 1st Qu.:2006-08-02 1st Qu.: 4.00
> Median :2006-08-04 Median : 5.50
> Mean :2006-08-03 Mean : 6.62
> 3rd Qu.:2006-08-05 3rd Qu.: 6.75
> Max. :2006-08-07 Max. :19.00
>
> #---isn't this supposed to work?
> > apply(test,2,mean)
> Date RANK
> NA NA
> Warning messages:
> 1: argument is not numeric or logical: returning NA in:
> mean.default(newX[, i], ...)
> 2: argument is not numeric or logical: returning NA in:
> mean.default(newX[, i], ...)

Look at ?apply and details.

Argument X of apply is supposed to be an array. Details says:

     If 'X' is not an array but has a dimension attribute, 'apply'
     attempts to coerce it to an array via 'as.matrix' if it is
     two-dimensional (e.g., data frames) or via 'as.array'.

So you should look at what is happening with as.matrix():

str(as.matrix(test))
 chr [1:50, 1:2] "2006-08-01" "2006-08-01" "2006-08-01" ...

Notice this is now a character matrix and not what you thought it was. So look at ?as.matrix and we see:

     'as.matrix' is a generic function. The method for data frames will
     convert any non-numeric/complex column into a character vector
     using 'format' and so return a character matrix, except that
     all-logical data frames will be coerced to a logical matrix.  When
     coercing a vector, it produces a one-column matrix, and promotes
     the names (if any) of the vector to the rownames of the matrix.

Which explains what is happening.

Workaround:

lapply(test, mean)
sapply(test, mean)

Both work

HTH, G

> Thank you,
> b.
>
> platform i386-pc-mingw32
> arch i386
> os mingw32
> system i386, mingw32
> status
> major 2
> minor 4.0
> year 2006
> month 10
> day 03
> svn rev 39566
> language R
> version.string R version 2.4.0 (2006-10-03)
>
> ______________________________________________
> R-help@stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

-- 
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
 Gavin Simpson                 [t] +44 (0)20 7679 0522
 ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
 Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
 Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
 UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%

______________________________________________
R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
Received on Sat Jan 20 04:34:23 2007

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Fri 19 Jan 2007 - 18:30:27 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.