[R-pkg-devel] Trying to work around missing functionality

Fox, John jfox @ending from mcm@@ter@c@
Tue Aug 28 06:01:22 CEST 2018


Hi John,

It's possible that I didn’t follow what you did, but it appears as if you call globalVariables() *inside* the function. Instead try to do as Richard Heiberger suggested and place the call outside of the function, e.g., in a source file in the package R directory named globals.R. (Of course, the name of the source file containing the command isn’t important.)

I hope this helps,
 John

-----------------------------------------------------------------
John Fox
Professor Emeritus
McMaster University
Hamilton, Ontario, Canada
Web: https://socialsciences.mcmaster.ca/jfox/



> -----Original Message-----
> From: R-package-devel [mailto:r-package-devel-bounces using r-project.org] On
> Behalf Of J C Nash
> Sent: Monday, August 27, 2018 8:44 PM
> To: Richard M. Heiberger <rmh using temple.edu>
> Cc: List r-package-devel <r-package-devel using r-project.org>
> Subject: Re: [R-pkg-devel] Trying to work around missing functionality
> 
> Unfortunately, makes things much worse. I'd tried something like this already.
> 
> > * checking examples ... ERROR
> > Running examples in ‘rootoned-Ex.R’ failed The error most likely
> > occurred in:
> >
> >> ### Name: rootwrap
> >> ### Title: zeroin: Find a single root of a function of one variable within
> >> ###   a specified interval.
> >> ### Aliases: rootwrap
> >> ### Keywords: root-finding
> >>
> >> ### ** Examples
> >>
> >> # Dekker example
> >> # require(rootoned)
> >> dek <- function(x){ 1/(x-3) - 6 }
> >> r1 <- rootwrap(dek, ri=c(3.0000001, 6), ftrace=TRUE,
> >> method="uniroot")
> > Error in registerNames(names, package, ".__global__", add) :
> >   The namespace for package "rootoned" is locked; no changes in the global
> variables list may be made.
> > Calls: rootwrap -> TraceSetup -> <Anonymous> -> registerNames
> > Execution halted
> 
> Also had to use utils::globalVariables( ...
> 
> JN
> 
> 
> On 2018-08-27 08:40 PM, Richard M. Heiberger wrote:
> > Does this solve the problem?
> >
> > if (getRversion() >= '2.15.1')
> >   globalVariables(c('envroot'))
> >
> > I keep this in file R/globals.R
> >
> > I learned of this from John Fox's use in Rcmdr.
> >
> > On Mon, Aug 27, 2018 at 8:28 PM, J C Nash <profjcnash using gmail.com>
> wrote:
> >> In order to track progress of a variety of rootfinding or
> >> optimization routines that don't report some information I want, I'm
> >> using the following setup (this one for rootfinding).
> >>
> >> TraceSetup <- function(ifn=0, igr=0, ftrace=FALSE, fn=NA, gr=NA){ #
> >> JN: Define globals here
> >>    groot<-list(ifn=ifn, igr=igr, ftrace=ftrace, fn=fn, gr=gr, label="none")
> >>    envroot <<- list2env(groot) # Note globals in FnTrace
> >>    ## This generates a NOTE that
> >>    ## TraceSetup: no visible binding for '<<-' assignment to ‘envroot’
> >> ##   envroot<-list2env(groot, parent=.GlobalEnv) # Note globals in FnTrace -
> - this does NOT work
> >>    ## utils::globalVariables("envroot") # Try declaring here --
> >> causes errors # end globals
> >>    envroot
> >> }
> >>
> >> FnTrace <- function(x,...) {
> >>   # Substitute function to call when rootfinding
> >>   # Evaluate fn(x, ...)
> >>     val <- envroot$fn(x, ...)
> >>     envroot$ifn <- envroot$ifn + 1 # probably more efficient ways
> >>     if (envroot$ftrace) {
> >>        cat("f(",x,")=",val," after ",envroot$ifn," ",envroot$label,"\n")
> >>     }
> >>     val
> >> }
> >>
> >>
> >> Perhaps there are better ways to do this, but this does seem to work quite
> well.
> >> It lets me call a rootfinder with FnTrace and get information on evaluations
> of fn().
> >> (There's another gr() routine, suppressed here.)
> >>
> >> However, R CMD check gives a NOTE for
> >>
> >>   TraceSetup: no visible binding for global variable ‘envroot’
> >>   Undefined global functions or variables:
> >>     envroot
> >>
> >> The commented lines in TraceSetup suggest some of the things I've
> >> tried. Clearly I don't fully comprehend how R is grinding up the
> >> code, but searches on the net seem to indicate I am far from alone. Does
> anyone have any suggestion of a clean way to avoid the NOTE?
> >>
> >> JN
> >>
> >> ______________________________________________
> >> R-package-devel using r-project.org mailing list
> >> https://stat.ethz.ch/mailman/listinfo/r-package-devel
> 
> ______________________________________________
> R-package-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-package-devel


More information about the R-package-devel mailing list