[Rd] evaluation in unattached namespace

Seth Falcon sfalcon at fhcrc.org
Fri Apr 27 02:51:53 CEST 2007


Duncan Murdoch <murdoch at stats.uwo.ca> writes:

> 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
>   }
>

quote(lattice::bwplot) also seems to work.

+ seth

-- 
Seth Falcon | Computational Biology | Fred Hutchinson Cancer Research Center
http://bioconductor.org



More information about the R-devel mailing list