Re: [Rd] surprising behaviour of names<-

2009-03-14 Thread Wacek Kusnierczyk
Berwin A Turlach wrote:
> On Sat, 14 Mar 2009 07:22:34 +0100
> Wacek Kusnierczyk  wrote:
>
> [...]
>   
>>> Well, I don't see any new object created in my workspace after
>>> x <- 4
>>> names(x) <- "foo"
>>> Do you?
>>>   
>>>   
>> of course not.  that's why i'd say the two above are *not*
>> equivalent. 
>>
>> i haven't noticed the 'in the c code';  do you mean the r interpreter
>> actually generates, in the c code, such r expressions for itself to
>> evaluate?
>> 
>
> As I said before, I have little knowledge about how the parser works and
> what goes on under the hood; and I have also little time and
> inclination to learn about it.  
>
> But if you are interested in these details, then by all means invest
> the time to investigate.
>
>   

berwin, you're playing radio erewan now.  i talk about what the user
sees at the interface, and you talk about c code.  then you admit you
don't know the code, and suggest i examine it if i'm interested.  i
incidentally am, but the whole point was that the user should not be
forced to look under the hood to know the interface to a function. 
prefix 'names<-' seems to have a certain behaviour that is not properly
documented.

> Alternatively, you would hope that Simon eventually finishes the book
> that he is writing on programming in R; as I understand it, that book
> would explain part of these issues in details.  Hopefully, along with
> the book he makes the tools that he has for introspection available.
>   

simon:  i'd be happy to contribute in any way you might find useful.

>   
 i guess you have looked under the hood;  point me to the relevant
 code. 
 
>>> No I did not, because I am not interested in knowing such intimate
>>> details of R, but it seems you were interested.
>>>   
>>>   
>> yes, but then your claim about what happens under the hood, in the c
>> code, is a pure stipulation.  
>> 
>
> I made no claim about what is going on under the hood because I have no
> knowledge about these matters.  But, yes, I was speculating of what
> might go on.
>   

owe me a beer.

>   
>> and you got the example from the r language definition sec. 10.2,
>> which says the forms are equivalent, with no 'under the hood, in the
>> c code' comment.
>> 
>
> Trying to figure out what a writer/painter actually means/says beyond
> the explicitly stated/painted, something that is summed up in Australia
> (and other places) under the term "critical thinking", was not high in
> the curriculum of your school, was it? :-)
>   

sure, but probably not the way you seem to think about.  have you
incidentally read ferdydurke by gombrowicz? 


>   
>> you're just showing that your statements cannot be taken seriously.
>> 
>
> Usually, my statement can be taken seriously, unless followed by some
> indication that I said them tongue-in-cheek.  Of course, statements
> that I allegedly made but were in fact put into my mouth cannot, and
> should not, be taken seriously.
>   

i'm talking about your speculations about what the parser does (wrt.
infix and prefix forms having exactly the same parse tree), rather vague
statements such as "'names<-'(x,'foo') should create (more or less) a
parse tree equivalent to that expression", and other statements (surely,
qualified with 'assuming', 'strongly suggests', and the like), coupled
with your admitting that you in fact donæt know what happens there, is
not particularly reassuring.
>   
 yes, *if* you are able to predict the refcount of the object
 passed to 'names<-' *then* you can predict what 'names<-' will do,
 [...] 
 
>>> I think Simon pointed already out that you seem to have a wrong
>>> picture of what is going on.  [...]
>>>   
>> so what you quote effectively talks about a specific refcount
>> mechanism.  it's not refcount that would be used by the garbage
>> collector, but it's a refcount, or maybe refflag.
>> 
>
> Fair enough, if you call this a refcount then there is no problem.
> Whenever I came across the term refcount in my readings, it was
> referring to different mechanisms, typically mechanisms that kept exact
> track on how often an object was referred too.  So I would not call the
> value of the named field a refcount.  And we can agree to call it from
> now on a refcount as long as we realise what mechanism is really used.
>   

the major point of the discussion was that 'names<-' will sometimes
modify and othertimes copy its argument.  you chose to justify this by
looking under the hood, and i suppose you were pretty clear what i meant
by refcount, because it should have been clear from the context.

>  
>   
>> yes, that's my opinion:  the effects of implementation tricks should
>> not be observable by the user, because they can lead to hard to
>> explain and debug behaviour in the user's program.  you surely don't
>> suggest that all users consult the source code before writing
>> programs in r.
>> 
>
> Indeed, I am not suggesting

Re: [Rd] surprising behaviour of names<-

2009-03-14 Thread Berwin A Turlach
On Sat, 14 Mar 2009 07:22:34 +0100
Wacek Kusnierczyk  wrote:

[...]
> > Well, I don't see any new object created in my workspace after
> > x <- 4
> > names(x) <- "foo"
> > Do you?
> >   
> 
> of course not.  that's why i'd say the two above are *not*
> equivalent. 
> 
> i haven't noticed the 'in the c code';  do you mean the r interpreter
> actually generates, in the c code, such r expressions for itself to
> evaluate?

As I said before, I have little knowledge about how the parser works and
what goes on under the hood; and I have also little time and
inclination to learn about it.  

But if you are interested in these details, then by all means invest
the time to investigate.

Alternatively, you would hope that Simon eventually finishes the book
that he is writing on programming in R; as I understand it, that book
would explain part of these issues in details.  Hopefully, along with
the book he makes the tools that he has for introspection available.

> >> i guess you have looked under the hood;  point me to the relevant
> >> code. 
> >
> > No I did not, because I am not interested in knowing such intimate
> > details of R, but it seems you were interested.
> >   
> 
> yes, but then your claim about what happens under the hood, in the c
> code, is a pure stipulation.  

I made no claim about what is going on under the hood because I have no
knowledge about these matters.  But, yes, I was speculating of what
might go on.

> and you got the example from the r language definition sec. 10.2,
> which says the forms are equivalent, with no 'under the hood, in the
> c code' comment.

Trying to figure out what a writer/painter actually means/says beyond
the explicitly stated/painted, something that is summed up in Australia
(and other places) under the term "critical thinking", was not high in
the curriculum of your school, was it? :-)

> you're just showing that your statements cannot be taken seriously.

Usually, my statement can be taken seriously, unless followed by some
indication that I said them tongue-in-cheek.  Of course, statements
that I allegedly made but were in fact put into my mouth cannot, and
should not, be taken seriously.

> >> yes, *if* you are able to predict the refcount of the object
> >> passed to 'names<-' *then* you can predict what 'names<-' will do,
> >> [...] 
> >
> > I think Simon pointed already out that you seem to have a wrong
> > picture of what is going on.  [...]
>
> so what you quote effectively talks about a specific refcount
> mechanism.  it's not refcount that would be used by the garbage
> collector, but it's a refcount, or maybe refflag.

Fair enough, if you call this a refcount then there is no problem.
Whenever I came across the term refcount in my readings, it was
referring to different mechanisms, typically mechanisms that kept exact
track on how often an object was referred too.  So I would not call the
value of the named field a refcount.  And we can agree to call it from
now on a refcount as long as we realise what mechanism is really used.
 
> yes, that's my opinion:  the effects of implementation tricks should
> not be observable by the user, because they can lead to hard to
> explain and debug behaviour in the user's program.  you surely don't
> suggest that all users consult the source code before writing
> programs in r.

Indeed, I am not suggesting this.  Only users who use/rely on
features that are not sufficiently documented would have to study the
source code to find out what the exact behaviour is.  But, of course,
this could be fraught with danger since the behaviour could change
without warning.

> i have indeed learned what prefix 'names<-' does and now i know that
> the surprising behaviour is due to the observability of the internal
> optimization.
> 
> thanks to simon, peter, and you for your answers which allowed me to
> learn this ugly detail.

You are welcome.

Cheers,

Berwin

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


Re: [Rd] surprising behaviour of names<-

2009-03-14 Thread Thomas Lumley

On Fri, 13 Mar 2009, William Dunlap wrote:


Would it make anyone any happier if the manual said
that the replacement functions should not be called
in the form
  xNew <- `func<-` (xOld, value)
and should only be used as
  func(xToBeChanged) <- value
?


That was my reaction, too.  The discussion reminded me of old comp.lang.c 
threads about i=i++ and similar issues. The anomalies in
  xNew <- `func<-` (xOld, value) 
arise precisely because it isn't supposed to be used that way.


My other proposal for 'rigidly defined areas of doubt and uncertainty' has been 
the evaluation order of the *apply family (eg, does apply process the columns 
left to right, or right to left, or however it feels like?).


  -thomas

Thomas Lumley   Assoc. Professor, Biostatistics
tlum...@u.washington.eduUniversity of Washington, Seattle

__
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel