sure, here's a series of commands/outputs (using R 3.0.0): > x <- letters[1:4]
> y <- "foo" > attributes(x) NULL > attributes(x)[[y]] <- "bar" Error in attributes(x)[[y]] <- "bar" : attributes must be a list or NULL > attr(x, y) <- "bar" > attributes(x) $foo [1] "bar" > attributes(x)[[y]] <- "newbar" > attributes(x) $foo [1] "newbar" > cheers! -m On Fri, May 10, 2013 at 12:31 PM, William Dunlap <wdun...@tibco.com> wrote: > > > attributes(my_obj)[[my_attr_name]] <- my_attr_value > > > > ...fails when my_obj doesn't already have an attribute named > my_attr_name. > > Do you have an example of this? In R-2.15.3 I don't see that problem: > > my_obj <- 37:41 > > my_attr_name <- "myAttr" > > my_attr_value <- as.roman(2012:2013) > > attributes(my_obj)[[my_attr_name]] <- my_attr_value > > my_obj > [1] 37 38 39 40 41 > attr(,"myAttr") > [1] MMXII MMXIII > > > attributes(my_obj)[["anotherAttrName"]] <- "another attribute value" > > my_obj > [1] 37 38 39 40 41 > attr(,"myAttr") > [1] MMXII MMXIII > attr(,"anotherAttrName") > [1] "another attribute value" > > Bill Dunlap > Spotfire, TIBCO Software > wdunlap tibco.com > > > > -----Original Message----- > > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] > On Behalf > > Of Murat Tasan > > Sent: Friday, May 10, 2013 8:16 AM > > To: Duncan Murdoch > > Cc: r-help@r-project.org > > Subject: Re: [R] attr vs attributes > > > > 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. > [[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.