From ripley at stats.ox.ac.uk  Wed Jun 18 08:00:49 2003
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Wed Jun 18 08:00:59 2003
Subject: [Rd] Re: [R] suggestion for make.names
In-Reply-To: <16111.44481.905860.302041@weird.stat.cmu.edu>
Message-ID: <Pine.LNX.4.44.0306180655380.27947-100000@gannet.stats>

Moved to R-devel, as it seems more appropriate to that audience and I 
think has a slightly more liberal policy on attachments.

You say

> I'm providing a new implementation (and documentation) of make.names 

where, please?


On Tue, 17 Jun 2003, Tom Minka wrote:

> I would like to suggest a modification to the make.names() function.
> The current implementation has two problems: 
> 1. It doesn't check if a name matches an R keyword (like "function").
> 2. The uniqueness algorithm is not invariant to concatenation.
>    In other words, 
>    make.names(c("a","a","a"),unique=T) != 
>    make.names(c(make.names(c("a","a"),unique=T),"a"),unique=T)
> 
> The first problem means that you can construct a data frame for which 
> there is no valid formula:
>   lm(if~then, data.frame("if"=3,"then"=4))
> 
> The second problem means that you get funny row names when you build
> up a data frame by concatenation:
>   rbind(data.frame(x=1),data.frame(x=2),data.frame(x=3)) !=
>   rbind(rbind(data.frame(x=1),data.frame(x=2)),data.frame(x=3))
> 
> I'm providing a new implementation (and documentation) of make.names which
> fixes these problems.  The uniqueness part is handled by make.unique, a
> useful function in its own right.  For example, the following code in
> rbind.data.frame:
>     while(any(xj <- duplicated(rlabs)))
>     rlabs[xj] <- paste(rlabs[xj], 1:sum(xj), sep = "")
> could be replaced by:
>     rlabs = make.unique(rlabs)
> 
> Another way to fix the first problem, by the way, would be to allow
> quoting in formulas, e.g. lm("if" ~ then, ...).  Currently, when you
> do this it gives an error.  This could eliminate the need for
> make.names in many cases, by being able to quote names like 
> "New Jersey" or "log(x)".

Yes, we know and it is planned to allow that.  However, R is a volunteer 
project and that looks far from trivial and rather low priority.  Now if 
you have a patch for that we would be pleased to see it.

-- 
Brian D. Ripley,                  ripley@stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595


[Rd] Re: [R] suggestion for make.names
Prof Brian Ripley