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.

Duncan Murdoch

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

Reply via email to