>>>>> Prof Brian Ripley <rip...@stats.ox.ac.uk> >>>>> on Mon, 30 Aug 2010 08:28:24 +0100 (BST) writes:
> On Thu, 26 Aug 2010, Martin Maechler wrote: >>>>>>> "WD" == William Dunlap <wdun...@tibco.com> >>>>>>> on Wed, 25 Aug 2010 17:31:27 -0700 writes: >> WD> Should there be a [[<-.factor() that either throws WD> an error or acts like [<-.factor() to avoid making WD> an illegal object of class factor? >> >> Yes, one or the other. >> Note that both `[<-` and `[[<-` are "Primitive" and do some >> "informal dispatch" in addition to the formal method dispatch, > I don't think so. do_subassign2 does formal method dispatch, albeit > internally, but nothing else (do_assign2_dflt selects only by > typeof()). One consider that as an "informal dispatch", notably distinguishing "list"s and atomics... >> so there's no need for an explicit '[[<-.factor' method definition. >> For factors, it seems rational and "expectable" that >> double bracket behaves as single bracket when *one* element is >> assigned. >> z[[2:3]] <- c("Two, Three") >> however should continue to give an error. > I added a [[<-.factor yesterday. Note that we do have a [<-.factor > which works on the integer codes, and I simply copied its logic. thank you! > BTW, you probably meant > z[[2:3]] <- c("Two", "Three") yes, indeed! Martin >> >> z <- factor(c("Two","Two","Three"), levels=c("One","Two","Three")) >> >> z WD> [1] Two Two Three WD> Levels: One Two Three >> >> str(z) WD> Factor w/ 3 levels "One","Two","Three": 2 2 3 >> >> z[[2]] <- "One" >> >> str(z) # the .Data part is now character WD> Factor w/ 3 levels "One","Two","Three": 2 One 3 >> >> z WD> [1] <NA> <NA> <NA> WD> Levels: One Two Three >> >> z[2] <- "One" WD> Error in class(x) <- cx : adding class "factor" to an invalid object >> WD> Bill Dunlap WD> Spotfire, TIBCO Software WD> wdunlap tibco.com ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel