From nilsson.henric at gmail.com  Sat Sep  6 03:47:06 2008
From: nilsson.henric at gmail.com (Henric Nilsson (Public))
Date: Sat, 06 Sep 2008 03:47:06 +0200
Subject: [Rd] typo in cov()? var() fails on NA in R 2.7.2 but not R 2.6.1
In-Reply-To: <20080905223827.GA61846@piskorski.com>
References: <20080905223827.GA61846@piskorski.com>
Message-ID: <48C1E11A.2060409@gmail.com>

Andrew Piskorski wrote:

> I recently started using R 2.7.2, and noticed a surprising change in
> the behavior of var() on NA data:
> 
> R 2.6.1 (Patched), 2007-11-26, svn.rev 43541, x86_64-unknown-linux-gnu:
> 
>   > stdev(rep(NA,3), na.rm=F)
>   [1] NA
>   > stdev(rep(NA,3), na.rm=T)
>   [1] NA
>   > var(rep(NA,3), na.rm=T, use="complete.obs")
>   [1] NA
> 
> R 2.7.2 (Patched), 2008-09-02, svn.rev 46491, x86_64-unknown-linux-gnu:
> 
>   > stdev(rep(NA,3), na.rm=F)
>   [1] NA
> 
>   > stdev(rep(NA,3), na.rm=T)
>   Error in var(x, na.rm = na.rm) : no complete element pairs
> 
>   Enter a frame number, or 0 to exit
>   1: stdev(rep(NA, 3), na.rm = T)
>   2: var(x, na.rm = na.rm)
>   Selection: 0
> 
>   > var(rep(NA,3), na.rm=T, use="complete.obs")
>   Error in var(rep(NA, 3), na.rm = T, use = "complete.obs") :
>     no complete element pairs
> 
> Is this change intentional?  Also, what is causing it?  Looking, I see
> no changes in var() at all, so the new behavior must be due to a
> change in what this call does:
> 
>   .Internal(cov(x, y, na.method, FALSE))
> 
> The R 2.7.2 cov() also has this weird line:
> 
>   else if (na.method != 3L) {
>  
> Note the "L" in the "3L".  A typo?  The older 2.6.1 cov() just has "3"
> on that line, no "L".

Not a typo! See R-2.5.0's NEWS:

NEW FEATURES

     o	Introduced the suffix L for integer literals to create
	integer rather than numeric values, e.g. 100L, 0x10L, 1e2L.

So,

 > class(3)
[1] "numeric"
 > class(3L)
[1] "integer"


HTH,
Henric



> 
> Interactively redefining cov() to remove the "L" makes no difference in my var() calls, but that could b
> 
> The original source file seems to be:
> 
>   src/library/stats/R/cor.R 
> 
> svn annotate says that 3L line was last changed nearly a year ago, way
> back in rev 43302:
> 
>   ------------------------------------------------------------------------
>   r43302 | ripley | 2007-10-29 14:50:18 -0400 (Mon, 29 Oct 2007) | 2 lines
>   make cor/cov a little less inconsistent
> 
> The strange 3L line occurs twice in that file, in both cor() and cov():
> 
>   $ grep -n 3L cor.R  
>   36:    else if (na.method != 3L) { 
>   118:    else if (na.method != 3L) { 
> 
> That line might not be the cause of my "no complete element pairs"
> problem (I'm not at all sure), but it does look suspicious.
>



[Rd] typo in cov()? var() fails on NA in R 2.7.2 but not R 2.6.1
Henric Nilsson (Public