>>>>> "DeepS" == Deepayan Sarkar <[EMAIL PROTECTED]> >>>>> on Fri, 15 Sep 2006 12:22:15 -0700 writes:
DeepS> Hi, since lattice uses nested lists in various DeepS> situations, it has had an unexported function called DeepS> updateList for a while, which looks like >> > lattice:::updateList >> function (x, val) >> { >> if (is.null(x)) >> x <- list() >> if (!is.list(x)) >> stop("x must be NULL or a list") >> if (!is.list(val)) >> stop("val must be a list") >> xnames <- names(x) >> for (v in names(val)) { >> existing <- v %in% xnames >> if (existing && is.list(x[[v]]) && is.list(val[[v]])) >> x[[v]] <- updateList(x[[v]], val[[v]]) >> else x[[v]] <- val[[v]] >> } >> x >> } [I'm not sure I'd allow NULL for 'x'; typing list() instead of NULL is not much more, but when the function name even includes 'list' I'd really require a list for 'x'] You could hence collapse the first 6 lines to the single stopifnot(is.list(x), is.list(val)) DeepS> Basically, it recursively replaces elements that have DeepS> been specified in val, leaving the other components DeepS> alone. I'm not aware of any other actual situation DeepS> where this is useful, but it certainly can be, so I DeepS> want to export this functionaliy. At least one other DeepS> person (Gabor) has also asked for that. I've had a similar need only recently: If a list is used to store "defaults" and you want a safe way to change only a few of the values... I presume you use this for manipulating the settings of lattice parts ? DeepS> Now, as the name suggests, I think it might be DeepS> reasonable to export this as an update method for DeepS> "list" objects. Depending on what others (in DeepS> particular r-core) think, one of these things might DeepS> happen: DeepS> (1) I export it as updateList (or some other name) in lattice DeepS> (2) I export it as an S3 method update.list in lattice DeepS> (3) It gets added as an S3 method update.list in one of the base packages or (4) it gets added as utility function updateList() to 'utils' {= one of the base packages} which I'd favor momentarily. - update() is typically for updating *models* - it's not clear that this is *the* method for update()ing a list I'm also a bit wondering if it wouldn't make sense to change the name to something like assignInList(). DeepS> The default option is (1), and I guess Sept 19 is the deadline for any DeepS> of these to be included in R 2.4.0. Yes, that's true for (3) & (4) are higher if you provide a patch to R-devel (not R-alpha) which includes a man page ... [but don't hurry, I'd like to see other comments] Martin ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel