On 4/26/2007 7:39 PM, Deepayan Sarkar wrote: > Hi, > > I recently discovered this buglet in lattice: If lattice is _not_ > attached, I get > >> lattice::dotplot(~1:10) > Error in eval(expr, envir, enclos) : could not find function "bwplot" > > This happens because of this: > >> lattice:::dotplot.formula > function (x, data = NULL, panel = "panel.dotplot", ...) > { > ocall <- ccall <- match.call() > ccall$data <- data > ccall$panel <- panel > ccall[[1]] <- as.name("bwplot") > ans <- eval.parent(ccall) > ans$call <- ocall > ans > } > <environment: namespace:lattice> > > That is, ccall is eval()-ed in the global environment where bwplot is > not visible. While this example is somewhat silly, similar things > happen when I try to import lattice from another package. > > Are there any simple alternatives? I tried > > ccall[[1]] <- as.name("lattice::bwplot") > > but that didn't work either.
One way would be to create a new environment with the caller's environment as the parent, and put a copy of bwplot in it, i.e. something like the following untested code: function (x, data = NULL, panel = "panel.dotplot", ...) { ocall <- ccall <- match.call() ccall$data <- data ccall$panel <- panel ccall[[1]] <- as.name("bwplot") evalenv <- new.env(parent = parent.frame()) assign("bwplot", bwplot, envir=evalenv) ans <- eval(ccall, envir=evalenv) ans$call <- ocall ans } Duncan Murdoch ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel