[R] Is there lazy copy in R?
Peng Yu
pengyu.ut at gmail.com
Tue Dec 15 21:34:25 CET 2009
2009/12/15 <tlumley at u.washington.edu>:
> On Wed, 16 Dec 2009, Peng Yu wrote:
>
>> On Tue, Dec 15, 2009 at 10:32 PM, hadley wickham <h.wickham at gmail.com>
>> wrote:
>>>>
>>>> I don't understand what these addresses mean. Would you please help me
>>>> understand it?
>>>
>>> Did you try reading the documentation?
>>>
>>> When an object is traced any copying of the object by the C
>>> function ‘duplicate’ or by arithmetic or mathematical operations
>>> produces a message to standard output. The message consists of
>>> the string ‘tracemem’, the identifying strings for the object
>>> being copied and the new object being created, and a stack trace
>>> showing where the duplication occurred. ‘retracemem()’ is used to
>>> indicate that a variable should be considered a copy of a previous
>>> variable (e.g. after subscripting).
>>
>> "The message consists of the string ‘tracemem’, the identifying
>> strings for the object being copied and the new object being created,
>> and a stack trace showing where the duplication occurred."
>>
>> I tried to read the document before I posted, but wasn't be able to
>> understand it, because there are multiple ways to parse it.
>>
>> To make sure that I understand, I rewrite the above sentence to the
>> following. Is it correct?
>>
>> "The message consists of the string ‘tracemem’, the string indicating
>> the object being copied, the string indicating the new object being
>> created, and a stack trace showing where the duplication occurred."
>>
>> I also didn't see a stack trace in my example. If I didn't see Martin
>> Morgan's post, I will still be confused.
>>
>
> The stack trace is there, it's just that it is empty because you aren't in a
> function.
>
>> I thought that there should be only one coping. Why there are two lines?
>>
>> tracemem[0x05cf2798 -> 0x05cf2750]:
>> tracemem[0x05cf2750 -> 0x05ed8ba0]:
I still don't understand what the numbers after 'tracemem[' are. Could
somebody please explain it?
> x=1:3
> tracemem(x)
[1] "<0x1056ef8>"
> x[[4]]=8#I still don't understand what '0x9ac9f0' means here
tracemem[0x1056ef8 -> 0x9ac9f0]:
> tracemem(x)#The address of 'x' is 0x9aca38 but not '0x9ac9f0'
[1] "<0x9aca38>"
> There are two lines because there are two copies. One is the lazy copy
> because the object is modified, the other is because it is converted from
> integer to numeric.
>
> The whole point of tracemem() is to show copies that you didn't expect, so
> being surprised by it is a good thing.
>
> -thomas
>
> Thomas Lumley Assoc. Professor, Biostatistics
> tlumley at u.washington.edu University of Washington, Seattle
>
More information about the R-help
mailing list