From r@turner @end|ng |rom @uck|@nd@@c@nz  Mon Nov  4 23:18:56 2019
From: r@turner @end|ng |rom @uck|@nd@@c@nz (Rolf Turner)
Date: Tue, 5 Nov 2019 11:18:56 +1300
Subject: [Rd] Puzzled about a new method for "[".
In-Reply-To: <ea776fff-03d2-a81c-66f7-3a986c44de5a@gmail.com>
References: <74a6cf10-3266-fef8-9ea0-0ba6d36db807@auckland.ac.nz>
 <CABdHhvFZ2VL27iJb_hZmMK1Tmxq1gZKu7np1fNjk9F2KM2ME8Q@mail.gmail.com>
 <3ccb53ef-a0a7-0449-28f2-fad550b719bf@auckland.ac.nz>
 <92d3dc36-f1d8-875b-4250-2cbd70978402@fredhutch.org>
 <ea776fff-03d2-a81c-66f7-3a986c44de5a@gmail.com>
Message-ID: <c2b066ab-a171-8a4f-1f8a-fceacdfc629d@auckland.ac.nz>

On 5/11/19 10:54 AM, Duncan Murdoch wrote:
> On 04/11/2019 4:40 p.m., Pages, Herve wrote:
>> Hi Rolf,
>>
>> On 11/4/19 12:28, Rolf Turner wrote:
>>>
>>> On 5/11/19 3:41 AM, Hadley Wickham wrote:
>>>
>>>> For what it's worth, I don't think this strategy can work in general,
>>>> because a class might have attributes that depend on its data/contents
>>>> (e.g.
>>>> https://urldefense.proofpoint.com/v2/url?u=https-3A__vctrs.r-2Dlib.org_articles_s3-2Dvector.html-23cached-2Dsum&d=DwICAg&c=eRAMFD45gAfqt84VtBcfhQ&r=BK7q3XeAvimeWdGbWY_wJYbW0WYiZvSXAJJKaaPhzWA&m=pqLHzHYLUeyQnxA1K_XhSbKJql6r9wK1RXcDG2tuZ6s&s=kPUlNqBPr6j4lPvqkIj8w2Gl5JYGLqJ7ws6wH5tpGcw&e= 
>>>>
>>>> ). I
>>>> don't think these are particularly common in practice, but it's
>>>> dangerous to assume that you can restore a class simply by restoring
>>>> its attributes after subsetting.
>>>
>>>
>>> You're probably right that there are lurking perils in general, but I am
>>> not trying to "restore a class".? I simply want to *retain* attributes
>>> of columns in a data frame.
>>>
>>> * I have a data frame X
>>> * I attach attributes to certain of its columns;
>>> ? ???? attr(X$melvin,"clyde") <- 42
>>> ? ? (I *don't* change the class of X$melvin.)
>>> * I form a subset of X:
>>> ? ??? Y <- X[1:100,3:10]
>>> * given that "melvin" is amongst columns 3 through 10 of X,
>>> ? ??? I want Y$melvin to retain the attribute "clyde", i.e. I
>>> ? ??? want attr(Y$melvin,"clyde") to return 42
>>>
>>> There is almost surely a better approach than the one that I've chosen
>>> (isn't there always?) but it seems to work, and the perils certainly are
>>> not immediately apparent to me.
>>
>> Maybe you've solved the problem for the columns that contain your
>> objects but now you've introduced a potential problem for columns that
>> contain objects with attributes whose value depend on content.
>>
>> Hadley it right that restoring the original attributes of a vector (list
>> or atomic) after subsetting is unsafe.
> 
> Right, so Rolf should only restore attributes that are ones he added in 
> the first place.? Unknown attributes should be left alone.

Fair point.  And that gets fiddly.  I guess I'm going to have to rethink 
my strategy.

cheers,

Rolf

-- 
Honorary Research Fellow
Department of Statistics
University of Auckland
Phone: +64-9-373-7599 ext. 88276



[Rd] Puzzled about a new method for "[".
Rolf Turner