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.formulafunction (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. -Deepayan
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
On 4/26/07, Duncan Murdoch <murdoch at stats.uwo.ca> wrote:> 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")Seth suggested ccall[[1]] <- quote(lattice::bwplot) which makes more sense and seems to work too. -Deepayan
Apparently Analagous Threads
- Lattice: Superpose bwplot and dotplot [newbie question]
- Lattice: Superpose bwplot on dotplot [Newbie Question]
- possible bug in plot.intervals.lmList
- Lattice problems / cannot load lattice
- lattice: defining an own function using args for "formula" and "groups"