Parlamis Franklin
2006-May-11 18:53 UTC
[Rd] @ accesses attributes, not just formal slots ?
Using the '@' operator, I am able to extract a 'names' attribute
assigned to a formal object.
However, I can not use the replacement form ('@<-') to assign that
attribute.
> setClass("foo", representation("numeric"))
[1] "foo"
> (new("foo", 1:4)->a)
An object of class ?foo?
[1] 1 2 3 4
> names(a) <- LETTERS[1:4]
> a at names
[1] "A" "B" "C" "D"
> a at names <- LETTERS[5:8]
Error in checkSlotAssignment(object, name, value) :
"names" is not a slot in class "foo"
I don't know that this asymmetry will ever cause a problem, but I
just wanted to note it because it appears from the help pages
'slot {methods}' and 'slotOp {base}' that the '@'
operator is only
intended to provide access to defined slots.
I am still on R 2.2.1.
Prof Brian Ripley
2006-May-11 19:53 UTC
[Rd] @ accesses attributes, not just formal slots ?
On Thu, 11 May 2006, Parlamis Franklin wrote:> Using the '@' operator, I am able to extract a 'names' attribute > assigned to a formal object. > However, I can not use the replacement form ('@<-') to assign that > attribute. > > > setClass("foo", representation("numeric")) > [1] "foo" > > (new("foo", 1:4)->a) > An object of class ?foo? > [1] 1 2 3 4 > > names(a) <- LETTERS[1:4] > > a at names > [1] "A" "B" "C" "D" > > a at names <- LETTERS[5:8] > Error in checkSlotAssignment(object, name, value) : > "names" is not a slot in class "foo" > > I don't know that this asymmetry will ever cause a problem, but I > just wanted to note it because it appears from the help pages > 'slot {methods}' and 'slotOp {base}' that the '@' operator is only > intended to provide access to defined slots.Yes, it is intended so. It is a side effect of the current implementation that @ will also access attributes, but that may change. Note that the help page for @ says These operators support the formal classes of package 'methods'. See 'slot' for further details. Currently there is no checking that the object is an instance of a class. so this should not come as a surprise to you. -- Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272866 (PA) Oxford OX1 3TG, UK Fax: +44 1865 272595