[Rd] "names<-" doesn't raise an error

hpages at fhcrc.org hpages at fhcrc.org
Wed Mar 4 19:25:35 CET 2009


When a method is not defined for an object, you
expect to get an error. But this is not the case for
"names<-". You can use "names<-" on any S4 object: it
will remain silent, giving you the impression that it
actually did something:

   setClass("A", representation(vals="numeric"))
   setMethod("names", "A", function(x) names(x at vals))

   > vals <- 8:2
   > names(vals) <- letters[1:7]
   > a <- new("A", vals=vals)
   > names(a)
   [1] "a" "b" "c" "d" "e" "f" "g"
   > names(a) <- LETTERS[1:7]         # no error
   > names(a)
   [1] "a" "b" "c" "d" "e" "f" "g"    # nothing has changed

Shouldn't "names<-" return an error like "[" or "[<-" do
in such situation?

   > a[2]
   Error in a[2] : object of type 'S4' is not subsettable
   > a[2] <- 55
   Error in a[2] <- 55 : object of type 'S4' is not subsettable

That would make it more convenient to implement classes where
instances have immutable names. For now I need to use the
following workaround:

   setReplaceMethod("names", "A", function(x, value) stop("cannot set  
my names"))

   > names(a) <- LETTERS[1:7]
   Error in `names<-`(`*tmp*`, value = c("A", "B", "C", "D", "E", "F", "G" :
     cannot set my names

but that shouldn't be necessary.


More information about the R-devel mailing list