[Rd] get ...

Duncan Murdoch murdoch at stats.uwo.ca
Wed Jul 2 17:27:08 CEST 2008


On 7/2/2008 10:57 AM, Luke Tierney wrote:
> On Tue, 1 Jul 2008, Duncan Murdoch wrote:
> 
>> On 30/06/2008 10:56 AM, Luke Tierney wrote:
>>> On Sat, 28 Jun 2008, Peter Dalgaard wrote:
>>> 
>>>> Gabor Grothendieck wrote:
>>>>> Suppose we do this:
>>>>> 
>>>>> 
>>>>>> f <- function(...) environment()
>>>>>> e <- f(a = 1, b = 2)
>>>>>> ls(e, all = TRUE)
>>>>>> 
>>>>> [1] "..."
>>>>> 
>>>>>> e$...
>>>>>> 
>>>>> <...>
>>>>> 
>>>>>> class(e$...)
>>>>>> 
>>>>> [1] "..."
>>>>> 
>>>>> Is there any way of getting a and b given e without
>>>>> modifying f?
>>>>> 
>>>>> evalq(list(...),e)
>>>> $a
>>>> [1] 1
>>>> 
>>>> $b
>>>> [1] 2
>>>> 
>>>> 
>>> 
>>> I'm wondering though whether we should allow the internal DOTSXP value
>>> of "..." to escape to the user level.  Might be more appropriate for
>>> get(e,"..."), e$... (and as.list.environment and maybe a few other
>>> things) to give the "Error: '...' used in an incorrect context" error
>>> if the value is a DOTSXP.
>>
>> On the other hand, what Gabor sees in e is what he would see inside f:
>>
>>> f <- function(...) { ls(all=T) }
>>> f(a=1, b=2)
>> [1] "..."
>> I don't think we should distinguish between user level in .GlobalEnv and what 
>> a user sees inside a function he writes.  Stopping a user from seeing ... 
>> inside a function would break all sorts of things.
> 
> Huh??
> 
> Noone is proposing that ls or exist, for example change.  ... is a
> special variable that can only be used in special contexts.  Just
> evaluating ... gives an error; get("...") used in the same context
> probably ought to as well.  What we do now is clearly wrong: return an
> undocumented object that can't be used for anyting useful (and
> reflects an internal implementation we might want to change).  We need
> to either prevent the R_DOTSXP values from leaking out or document
> them , define [ methods and figure out what they should do, etc.
> Preventing them from leaking out is the sensible thing to do.

Sorry, I misunderstood what you were suggesting.  So you wouldn't 
propose to change the behaviour of Peter's evalq(list(...),e)?

Duncan Murdoch



More information about the R-devel mailing list