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
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
On 11/4/19 13:54, 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.Exactly. More precisely the problem needs to be tackled at the level of his objects (i.e. define a [ method for his objects that preserves the attributes) and not at the level of the [ method for data frames. The [ method for data frames will call his [ method when needed. H.> > Duncan Murdoch-- Herv? Pag?s Program in Computational Biology Division of Public Health Sciences Fred Hutchinson Cancer Research Center 1100 Fairview Ave. N, M1-B514 P.O. Box 19024 Seattle, WA 98109-1024 E-mail: hpages at fredhutch.org Phone: (206) 667-5791 Fax: (206) 667-1319
You can try for testing with a column of class errors, from the package 'errors'. The attributes depend on the content in the way Hadley pointed out. I?aki El lun., 4 nov. 2019 23:19, Rolf Turner <r.turner at auckland.ac.nz> escribi?:> 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 > > ______________________________________________ > R-devel at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel >[[alternative HTML version deleted]]