On 12/09/2013 5:54 PM, Gang Peng wrote:
Hi Bill,
Thanks. I think we can define the function in the environment whose parent
environment is empty environment. But don't know how.
You can say environment(f) <- emptyenv()
but then almost nothing will work. You wanted a+b. It won't know what
+ is.
Duncan Murdoch
Best,
Mike
2013/9/12 William Dunlap <wdun...@tibco.com>
> If you want to find out if you've forgotten to make 'a' an argument
> you can use codetools::findGlobals(func) to list the names that don't
> refer to something already defined in the 'func':
> > fun <- function(b) a + b
> > library(codetools)
> > findGlobals(fun)
> [1] "+" "a"
> You need to filter out things defined in some attached package (like the
> "+"
> from the base package). I think that when you run 'R CMD check' on a
> package this sort of check is made on the functions in the package.
> findGlobals does not run the function to make its checks, it just looks at
> the function.
>
> A kludgy way to get an error message instead of having the function
> silently
> use something from .GlobalEnv is to make the environment of the function
> the parent of .GlobalEnv
> > a <- 1000
> > environment(fun) <- parent.env(globalenv())
> > fun(7)
> Error in fun(7) : object 'a' not found
> Since this is a run-time check it will not find problems in branches of the
> code that are not run. The parent environment of .GlobalEnv changes
> every time you attach or detach a package. For production code you will
> want to use a package - the namespace mechanism and the check command
> will take care of most of this sort of problem.
>
> Bill Dunlap
> Spotfire, TIBCO Software
> wdunlap tibco.com
>
>
> > -----Original Message-----
> > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org]
> On Behalf
> > Of Sarah Goslee
> > Sent: Thursday, September 12, 2013 2:09 PM
> > To: Gang Peng
> > Cc: r-help@r-project.org
> > Subject: Re: [R] How to avoid searching variables in global environment
> >
> > Hi,
> >
> > You need to specify that a is an argument to the function:
> >
> > On Thu, Sep 12, 2013 at 3:56 PM, Gang Peng <michael.gang.p...@gmail.com>
> wrote:
> > > For example:
> > >
> > > a <- 1
> > >
> > > f <- function(b){
> > > return(a+b)
> > > }
> > >
> >
> > f <- function(b, a) {
> > return(a+b)
> > }
> >
> > > when we call function f(2), r will search the local environment first,
> if
> > > it cannot find a, it will search global environment, and return 3. How
> to
> > > avoid r searching the global environment and return an error when we
> call
> > > this function?
> >
> > The function will now give an error if a is not specified.
> >
> > Sarah
> >
> > --
> > Sarah Goslee
> > http://www.functionaldiversity.org
> >
> > ______________________________________________
> > R-help@r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide
> http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
>
[[alternative HTML version deleted]]
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.