[Rd] Formula evaluation, environments and attached packages
Milan Bouchet-Valat
nalimilan at club.fr
Wed Apr 29 19:37:50 CEST 2015
Le mercredi 29 avril 2015 à 18:27 +0100, Heather Turner a écrit :
> Hi Milan,
>
> I expect I may be able to do something about the way the terms are
> evaluated, to ensure the evaluation is done in the gnm namespace (while
> still ensuring the variables can be found!).
>
> In the meantime, I think the following will work:
>
> Mult <- gnm::Mult
> f <- Freq ~ Eye + Hair + Mult(Eye, Hair)
> gnm::gnm(f, family=poisson, data=dat)
Indeed, that's a good trick, waiting for a more general solution.
Regards
> Hope that helps,
>
> Heather
>
> On Wed, Apr 29, 2015, at 05:57 PM, Milan Bouchet-Valat wrote:
> > Hi!
> >
> > Some time ago, I replaced calls to library() with calls to
> > requireNamespace() in my package logmult, in order to follow the new
> > CRAN policies. But I just noticed it broke jackknife/bootstrap using
> > several workers via package parallel.
> >
> > The reason is that I'm running model replicates on the workers, and the
> > formula includes non-standard terms like Mult() which are provided by
> > gnm. If gnm is not attached to the global namespace, these functions are
> > not found.
> >
> > What would be the best solution to fix this? I tried changing the
> > environment of the formula to be gnm's namespace, but so far I failed.
> >
> > Here's a reproducer using only gnm:
> >
> > > dat <- structure(c(326, 688, 343, 98, 38, 116, 84, 48, 241, 584, 909,
> > + 403, 110, 188, 412, 681, 3, 4, 26, 85), .Dim = 4:5, .Dimnames =
> > structure(list(
> > + Eye = c("Blue", "Light", "Medium", "Dark"), Hair = c("Fair",
> > + "Red", "Medium", "Dark", "Black")), .Names = c("Eye", "Hair"
> > + )), class="table")
> > >
> > > f <- Freq ~ Eye + Hair + Mult(Eye, Hair)
> > > gnm::gnm(f, family=poisson, data=dat)
> > Error in which(sapply(variables, function(x) { :
> > error in evaluating the argument 'x' in selecting a method for function
> > 'which':
> > Error in get(as.character(FUN), mode = "function", envir = envir) :
> > object 'Mult' of mode 'function' was not found
> >
> > # Failed attempt by setting the environment
> > > environment(f) <- loadNamespace("gnm")
> > > environment(f)
> > <environment: namespace:gnm>
> > > gnm::gnm(f, family=poisson, data=dat)
> > Error in which(sapply(variables, function(x) { :
> > error in evaluating the argument 'x' in selecting a method for function
> > 'which':
> > Error in get(as.character(FUN), mode = "function", envir = envir) :
> > object 'Mult' of mode 'function' was not found
> >
> >
> > Thanks for your help
More information about the R-devel
mailing list