R-alpha: Re: R/R-minus incompatibility [ an old one ]

Paul Gilbert pgilbert@bank-banque-canada.ca
Mon, 10 Nov 1997 11:43:11 -0500


>> x[["f"]]<-1
 >> zz<-"g"
 >In R both variants fail unless the name is already on the list. The
 >first one can be replaced by x$f, but there's seems to be no
 >substitute for the other one (oh yes I found one, but it's not fit to

A long time ago it seems it was decided to remain incompatible with S on
this, I think because  people often do this in error. (Indeed, it did
point out some errors in my code.) However, there were some instances in
my code where I did something like x[[c("f","g","h")]] <- 1:3 and wanted
the corresponding elements updated or inserted as appropriate.  I have
replaced those instances with listadd(x, c("f","g","h")) <- 1:3 where
listadd is as defined below (more or less as suggested by Ross or Robert
at the time). It is one of the functions in the compatibility code I
have circulated previously.

Paul Gilbert
________
   "list.add<-" <- function(x, replace, value)
     {# replace or add elements to a list.
      if (is.numeric(replace))
        {x[[replace]] <- value
         return(x)
        }
      if (is.null(value))  value <- list(NULL)
      if (!is.list(value)) value <- list(value)
      if (1 == length(value))
       {for (i in seq(length(replace)))
          x<- do.call("$<-", list(x,replace[i],value[[1]]))
       }
      else
        {if(length(value) != length(replace) )
         stop("number of replacement values != number of elements to
replace")
         for (i in seq(length(replace)))
            x<- do.call("$<-", list(x,replace[i],value[[i]]))
        }
      x
     }


=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=