[R] strange behavior of names<-
    Liaw, Andy 
    andy_liaw at merck.com
       
    Mon May 10 04:41:12 CEST 2004
    
    
  
Dear R-help,
I've encounter what seems to me a strange problem with "names<-".  Suppose I
define the function:
fun <- function(x, f) {
    m <- tapply(x, f, mean)
    ans <- x - m[match(f, unique(f))]
    names(ans) <- names(x)
    ans
}
which subtract out the means of `x' grouped by `f' (which is the same as,
e.g., resid(lm(x~f)) if `f' is a factor).  If `x' does not have names, then
I'd expect the output of the function not to have names, as names(x) would
be NULL, and assigning NULL to names(ans) should wipe out the names of
`ans'.  However, I get:
> x = rnorm(20)
> f = factor(sample(rep(letters[1:4], 5)))
> fun(x, f)
          a           b           c           b           c           c
d 
-0.53791639  1.03704065  0.95727411  0.89219177 -0.04218746  0.57976675
-2.15799919 
          a           c           d           a           d           b
d 
 1.28422452 -0.92881186  0.40526262 -0.13471983 -0.72599709  1.68726680
-0.95420354 
          a           c           a           b           b           d 
-2.28013373  1.02522037  0.07728352  0.54321899  0.95742354 -1.68420455 
What am I missing?
[BTW, this is using the tip that Thomas Lumley posted about forming the
group means.  I've wanted to write a `tsweep' function that's sort of the
cross of tapply() and sweep().]
Best,
Andy Liaw, PhD
Biometrics Research      PO Box 2000, RY33-300     
Merck Research Labs           Rahway, NJ 07065
mailto:andy_liaw at merck.com        732-594-0820
    
    
More information about the R-help
mailing list