I thought '+' was defined in a more basic level. I usually use CPP. R is very different from CPP in many basic concepts.
M. 2013/9/12 William Dunlap <wdun...@tibco.com> > Typo: in > environment(fun) <- new.env(parent=parent.env()) > the parent.env() should have been emptyenv(). But, as > I said, you do not want to do that. > > 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 William Dunlap > > Sent: Thursday, September 12, 2013 3:19 PM > > To: Gang Peng > > Cc: r-help@r-project.org > > Subject: Re: [R] How to avoid searching variables in global environment > > > > You can do that with > > environment(fun) <- new.env(parent=parent.env()) > > but then your function, function(b)a+b, will not be able > > to find the "+" function. > > > > Putting this code into a package simplifies things a lot. > > > > E.g., I added a file containing the two lines > > phi <- sum(1/(1:1e6)) - log(1e6) # 0.5772... > > fun <- function(b) a + b + phi > > to a package (and added phi and fun to the NAMESPACE file's export > > command). Then R CMD check myPackage reported > > * checking R code for possible problems ... Note > > fun: no visible binding for global variable 'a' > > It did not complain about the "+" or "phi", since they are > > either in the package or in some package required by my > > package but it did complain about the "a". > > > > Furthermore, at runtime, fun will always get phi from the package, > > even if I happen to have a phi in my global environment. > > > fun(10) > > Error in fun(10) : object 'a' not found > > > a <- 1000 > > > fun(10) # uses .GlobalEnv's a > > [1] 1010.577 > > > phi <- 100 > > > fun(10) # still uses myPackage's phi > > [1] 1010.577 > > > > Bill Dunlap > > Spotfire, TIBCO Software > > wdunlap tibco.com > > > > From: Gang Peng [mailto:michael.gang.p...@gmail.com] > > Sent: Thursday, September 12, 2013 2:54 PM > > To: William Dunlap > > Cc: Sarah Goslee; r-help@r-project.org > > Subject: Re: [R] How to avoid searching variables in global environment > > > > Hi Bill, > > > > Thanks. I think we can define the function in the environment whose > parent environment > > is empty environment. But don't know how. > > Best, > > Mike > > > > > > 2013/9/12 William Dunlap <wdun...@tibco.com<mailto: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<http://tibco.com> > > > > > > > -----Original Message----- > > > From: r-help-boun...@r-project.org<mailto:r-help-boun...@r-project.org> > [mailto: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<mailto: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<mailto: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<mailto: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. > [[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.