On Mar 11, 2010, at 11:28 PM, David Winsemius wrote:
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 particularmakingsummary calculations on rows or cols of a matrix containing them. Forexample, 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 30apply(a[!is.na(a)],2,sum)give me this: "Error in apply(a[!is.na(a)], 2, sum) : dim(X) must have a positivelength"whendim(a)[1] 5 6What is the trick to calculating summary values from rows or columnscontaining 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 ina 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 thena.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 faultyreasoning 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 useful functions, like median and density.
AS a further exercise you may want to follow this path. (I learned new bits.) After getting annoyed that neither ""na.rm", nor ??"na.rm" provided any 'help', I tried the sos package:
> ??"na.rm"
No help files found matching ‘na.rm’ using regexp matching
> library(sos)
Loading required package: brew
Attaching package: 'sos'
The following object(s) are masked from package:utils :
?
> ???"na.rm"
found 476 matches; retrieving 20 pages, 400 matches.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
The ``trick'' is to remove the NAs at the summing stage: apply(a,2,sum,na.rm=TRUE) Not all that tricky. cheers, Rolf TurnerDavid Winsemius, MD West Hartford, CT ______________________________________________ [email protected] 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.
David Winsemius, MD West Hartford, CT ______________________________________________ [email protected] 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.

