On Mar 11, 2010, at 6:20 PM, Jim Bouldin wrote:
On 12/03/2010, at 11:25 AM, Jim Bouldin wrote:
I continue to have great frustrations with NA values--in particular
making
summary calculations on rows or cols of a matrix containing them.
For
example, why does:
a = matrix(1:30,nrow=5)
is.na(a[c(1:2),c(3:4)]);a
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 6 NA NA 21 26
[2,] 2 7 NA NA 22 27
[3,] 3 8 13 18 23 28
[4,] 4 9 14 19 24 29
[5,] 5 10 15 20 25 30
apply(a[!is.na(a)],2,sum)
give me this:
"Error in apply(a[!is.na(a)], 2, sum) : dim(X) must have a positive
length"
when
dim(a)
[1] 5 6
What is the trick to calculating summary values from rows or columns
containing NAs? Drives me nuts. More nuts that is.
When you do a[!is.na(a)] you get a ***vector*** --- not a matrix.
``Obviously''!!!
Well, obvious to you maybe, or someone who's done it before, but not
to me.
The non-missing values of a cannot be arranged in
a 5 x 6 matrix; there are only 26 of them. So (as my late Uncle
Stanley would have said) ``What the hell do you expect?''.
Silly me, I expected, based on (1) previous experience doing summary
calcs
on subsets of a matrix using exactly that style of command, and (2)
the
fact that dim(a) returns: [1] 5 6, and (3) the fact that a help search
under the "apply" function gives NO INDICATION of any possible use
of the
na.rm command,
Not really true. You may be at a stage where you are not paying
attention to what the , ...) arguments to functions are doing, so you
may have passed over the fact that it is described as "optional
arguments to FUN." Now in fairness to the apply help page authors it
would be impossible to list all of the possible optional arguments
because the range of possible functions is, while countable, still
extremely large. I think it would be useful to describe on that help
page a bit more about what restrictions may exist here and to include
an example that uses that facility, but I am not part of R Core.
AND (4) a help search on "na.action" does not even mention
na.rm, that:
apply(a[!is.na(a)],2,sum)
would sum the non-NA elements of matrix a, by columns. Terribly
faulty
reasoning on my part, obviously.
What, may I inquire, happens when you look at the help page for "sum"?
While you are at it, you may want to acquaint yourself with the
"na.rm=" parameter in other functions, because it is also essential
for productive use of several other usueful functions, like median and
density.
The ``trick'' is to remove the NAs at the summing stage:
apply(a,2,sum,na.rm=TRUE)
Not all that tricky.
cheers,
Rolf Turner
David Winsemius, MD
West Hartford, CT
______________________________________________
R-help@r-project.org 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.