[Rd] evaluation in unattached namespace
Duncan Murdoch
murdoch at stats.uwo.ca
Fri Apr 27 02:29:55 CEST 2007
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
More information about the R-devel
mailing list