Dennis Fisher
2009-Mar-23 22:06 UTC
[R] Confusion regarding environments invoked by "source" command
Colleagues, R version 2.8.1 in OS X Within a function (which is already within a function), I am sourcing a file. The syntax of the command is something like (this is just an example; the actual code is much more complicated): BIGFUNCTION <- function() { DATAFRAME <- [some commands to create a dataframe] MYFUNCTION(DATAFRAME) } MYFUNCTION <- function(DATAFRAME) { print(ls()) exists("DATAFRAME") source("myfile", local=T) } The file "myfile" contains the following: print(DATAFRAME) When I execute BIGFUNCTION from the command line, R reports: Error in print(DATAFRAME) : object "DATAFRAME" not found Calls: BIGFUNCTION ... source -> eval.with.vis -> eval.with.vis -> print -> head Execution halted However, the "print(ls())" command has just listed the existence of DATAFRAME and "exists(DATAFRAME) return TRUE So, I am at a loss as to why ls() and "exists" see the object but print(DATAFRAME) command does not. I tried "local=F" in the source command to no avail. I also replaced "print(DATAFRAME)" with "print(str(DATAFRAME))" with the same outcome. I assume that this is an error as to how I am managing environments but I cannot figure out a solution. Any help would be appreciated. Dennis Dennis Fisher MD P < (The "P Less Than" Company) Phone: 1-866-PLessThan (1-866-753-7784) Fax: 1-415-564-2220 www.PLessThan.com
Duncan Murdoch
2009-Mar-23 22:31 UTC
[R] Confusion regarding environments invoked by "source" command
On 23/03/2009 6:06 PM, Dennis Fisher wrote:> Colleagues, > > R version 2.8.1 in OS X > > Within a function (which is already within a function), I am sourcing > a file. The syntax of the command is something like (this is just an > example; the actual code is much more complicated):This code works just as expected, once you make it syntactically correct. I suspect you have something else wrong in the real case. Here's my log: > BIGFUNCTION<- function() + { + DATAFRAME<- data.frame(a=1:3,b=4:6) + MYFUNCTION(DATAFRAME) + } > > MYFUNCTION<- function(DATAFRAME) + { + print(ls()) + exists("DATAFRAME") + source("myfile.R", local=T) + } > BIGFUNCTION() [1] "DATAFRAME" a b 1 1 4 2 2 5 3 3 6 Duncan Murdoch> BIGFUNCTION <- function() > { > DATAFRAME <- [some commands to create a dataframe] > MYFUNCTION(DATAFRAME) > } > MYFUNCTION <- function(DATAFRAME) > { > print(ls()) > exists("DATAFRAME") > source("myfile", local=T) > } > > The file "myfile" contains the following: > print(DATAFRAME) > > When I execute BIGFUNCTION from the command line, R reports: > Error in print(DATAFRAME) : object "DATAFRAME" not found > Calls: BIGFUNCTION ... source -> eval.with.vis -> eval.with.vis -> > print -> head > Execution halted > However, the "print(ls())" command has just listed the existence of > DATAFRAME and "exists(DATAFRAME) return TRUE > So, I am at a loss as to why ls() and "exists" see the object but > print(DATAFRAME) command does not. > > I tried "local=F" in the source command to no avail. > I also replaced "print(DATAFRAME)" with "print(str(DATAFRAME))" with > the same outcome. > I assume that this is an error as to how I am managing environments > but I cannot figure out a solution. Any help would be appreciated. > > Dennis > > > > Dennis Fisher MD > P < (The "P Less Than" Company) > Phone: 1-866-PLessThan (1-866-753-7784) > Fax: 1-415-564-2220 > www.PLessThan.com > > ______________________________________________ > R-help at 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.