"Richard A. O'Keefe" <[EMAIL PROTECTED]> writes:

> Thomas Lumley <[EMAIL PROTECTED]> wrote:
>       I would have said that the behavior of
>          (if (cond) names else dim)(x) <- 10
>       is undefined in the S language, along with things like the order of
>       evaluation of the apply functions.
>       
> The thing is, it would make perfect sense for
>     (if (cond) f else g)(x) <- e
> to have the effect of
>     (if (cond) f(x) <- e else g(x) <- e)          
> 
> In fact, I've used two programming languages where the analogue of
> this _did_ work, and a third where it didn't but using only published
> interfaces could very easily be made to work.

Yes, and it could be made to work in R too with a simple semantic
change: The fundamental problem is that replacement functions are
bound to symbols in R, not to the actual functions. That is the reason
why we have

> x <- c(a=1)
> x
a
1
> (names)(x)
[1] "a"
> (names)(x) <- 1
Error: couldn't find function "PT<-"

(that's with the bug unfixed). The thing is that (names) is an unnamed
function so there's no way to know that "names<-" is the replacment
function. If names<- had been an attribute of names, then there would
be no problem. Usual story: Code that needs to go via the textual
representation of something is often subtly wrong.

Of course noone really need to do this, do they? So the incentive to
change is rather small.

-- 
   O__  ---- Peter Dalgaard             Blegdamsvej 3  
  c/ /'_ --- Dept. of Biostatistics     2200 Cph. N   
 (*) \(*) -- University of Copenhagen   Denmark      Ph: (+45) 35327918
~~~~~~~~~~ - ([EMAIL PROTECTED])             FAX: (+45) 35327907

______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help

Reply via email to