From plroebuck at mdanderson.org  Sat Jun  7 10:44:31 2008
From: plroebuck at mdanderson.org (Paul Roebuck)
Date: Sat, 7 Jun 2008 03:44:31 -0500 (CDT)
Subject: [Rd] slot(obj, "nosuch") documentation question
Message-ID: <Pine.OSF.4.58.0806070258001.292185@wotan.mdacc.tmc.edu>

Using slot() on object (or "@") and using a nonexistent
slotname returns an error (see example code).

R> setClass("foobar", representation=list(a="numeric"))
[1] "foobar"
R> foobar <- new("foobar", a=5)
R> foobar at a
[1] 5
R> foobar at b
Error: no slot of name "b" for this object of class "foobar"

The details section of manpage has a paragraph that
seems to agree with above:

    Unlike attributes, slots are not partially matched,
    and asking for (or trying to set) a slot with an
    invalid name for that class generates an error.

But then the last paragraph in that same section seems to
suggest otherwise.

    Currently the @ extraction operator and slot function
    do no checking, neither that object has a formal class
    nor that name is a valid slot name for the class. (They
    will extract the attribute of the given name if it
    exists from any R object.) The replacement forms do
    check (at least if check=TRUE).

Are these two paragraphs not in partial conflict with each
other? I had initially expected (my initial bottom-up
quick glance only read last paragraph) to get NULL from
invalid slotname.

This is in reference to writing method that might be
passed an object created by previous version of software,
and new slots were added to class in later revisions.

For such situations, is the norm then to do
"slotNames(obj) %in% <slotname>" prior to accessing any
slotname from extended class?


TIA


R version 2.7.0 Patched (2008-06-04 r45830)

----------------------------------------------------------
SIGSIG -- signature too long (core dumped)



[Rd] slot(obj, "nosuch") documentation question
Paul Roebuck