thanks, both. the only real difference between the two approaches that i can see is when assigning _new_ attributes to an object where the attribute name is itself variable. something like this:
> attributes(my_obj)[[my_attr_name]] <- my_attr_value ...fails when my_obj doesn't already have an attribute named my_attr_name. BUT(!) it does work just fine when the attribute named my_attr_name is already attached to my_obj. i guess in the end attr(...) is just easier, but i can also see a spot of confusion in the 'attributes(x)[[y]] <- z' working sometimes for folks and sometimes not. (to be clear, it's pretty easy to figure out when it does and doesn't work, but if there's a new programmer coming along and it works the first time, when the upstream code changes a bit (i.e. the attribute name changes) and this attribute-setting line then fails, it could be very confusing :-) thanks for the thoughts! cheers, -m On Fri, May 10, 2013 at 10:58 AM, Duncan Murdoch <murdoch.dun...@gmail.com>wrote: > On 10/05/2013 10:50 AM, Rui Barradas wrote: > >> Hello, >> >> There's at least one example where only the form attr(x, "foo") <- "bar" >> would work, not the other form. If you want to set attributes >> programatically, use the first form, like in the function below. Note >> that the example is artificial. >> >> >> setAttr <- function(x, attrib, value){ >> attr(x, attrib) <- value >> x >> } >> >> x <- 1:4 >> setAttr(x, "foo", "bar") >> >> >> You cannot make >> >> attribute(x)$attrib <- value >> > > But > > attributes(x)[[attrib]] <- value > > would be fine. I don't know why Murat thought there would be different > consistency checks; I'd assume the main difference would be that attr() > would be quicker. (It does a lot less: attributes(x)[[attrib]] <- value > essentially does > > temp <- attributes(x) > temp[[attrib]] <- value > attributes(x) <- temp > > and there are a lot of wasted operations there.) > > Duncan Murdoch > > > >> >> Hope this helps, >> >> Rui Barradas >> >> Em 09-05-2013 18:35, Murat Tasan escreveu: >> > hi all -- i looked through the R Language Definition document, but >> couldn't >> > find any particular warning or example that would clarify the best use >> of >> > attribute setting for R objects. >> > >> > let x be some R object, and i'd like to add attribute "foo" with value >> > "bar". >> > >> > case 1: >> >> attr(x, "foo") <- "bar" >> > >> > case 2: >> >> attributes(x)$foo <- "bar" >> > >> > in both cases, attributes(x) reveals the appropriate setting has taken >> > place. >> > i'm assuming that attr(...) is 'safer' in the sense that perhaps >> > consistency checks are made? >> > (almost like a generic accessor/setter method?) >> > but i also haven't seen any examples where case 2 (above) would bad... >> is >> > there are trivial such example out there? >> > >> > BTW -- the cause for interest here is when dealing with dendrogram >> objects, >> > for which much of the useful data are stored as attributes, and where >> > running dendrapply means having to explicitly set attribute values to >> > retain the tree structure in the resulting object. >> > >> > cheers, >> > >> > -m >> > >> > [[alternative HTML version deleted]] >> > >> > ______________________________**________________ >> > R-help@r-project.org mailing list >> > https://stat.ethz.ch/mailman/**listinfo/r-help<https://stat.ethz.ch/mailman/listinfo/r-help> >> > PLEASE do read the posting guide http://www.R-project.org/** >> posting-guide.html <http://www.R-project.org/posting-guide.html> >> > and provide commented, minimal, self-contained, reproducible code. >> > >> >> ______________________________**________________ >> R-help@r-project.org mailing list >> https://stat.ethz.ch/mailman/**listinfo/r-help<https://stat.ethz.ch/mailman/listinfo/r-help> >> PLEASE do read the posting guide http://www.R-project.org/** >> posting-guide.html <http://www.R-project.org/posting-guide.html> >> and provide commented, minimal, self-contained, reproducible code. >> > > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.