Eva Prieto Castro
2012-Aug-07 07:09 UTC
[R] Problem with global variable building a package
Hi, My name is Eva and this is my first message here. My English is not very good, but I hope you can understand my question, in the context of an academic project. I have developed several functions in R and the idea is that the user can access functions in order to: 1) Alter parameters in relation with data and type of analysis. 2) Run statistical analysis (Text and pdf files with results will be generated). 3) View the value of the most important parameters. All the parameters I need are stored in a list object, and this list is used in all the functions along the cycle performed by the user, but I would like the user does not need to pass the name of the list as argument when he/she runs the different functions, so I think I need to treat the list as a global variable. Firstly, I used the global assignment operator (“<<-“); secondly, I used “get” and “assign” functions and even I used a new.env() in order to use a new environment exclusively for my list. However, when I try to build a package with all my functions I don’t reach this end, because of an error in parse process. My question for you is the following: taking into account that my end is to build a package, what can I do with this “global” list?. How can I treat it?. Thanks in advance. Regards, Eva [[alternative HTML version deleted]]
R. Michael Weylandt
2012-Aug-07 18:35 UTC
[R] Problem with global variable building a package
On Tue, Aug 7, 2012 at 2:09 AM, Eva Prieto Castro <evapcastro at yahoo.es> wrote:> > > Hi, > > > > My name is > Eva and this is my first message here. My English is not very good, but I hope > you can understand my question, in the context of an academic project. > > > > I have > developed several functions in R and the > idea is that the user can access functions in order to: > > > > 1) > Alter > parameters in relation with data and type of analysis. > > 2) > Run > statistical analysis (Text and pdf files with results will be generated). > > 3) > View > the value of the most important parameters. > > > > All the > parameters I need are stored in a list object, and this list is used in all the > functions along the cycle performed by the user, but I would like the user does > not need to pass the name of the list as argument when he/she runs the different > functions, so I think I need to treat the list as a global variable. > > > > Firstly, I > used the global assignment operator (?<<-?); secondly, I used ?get? and ?assign? > functions and even I used a new.env() in order to use a new environment > exclusively for my list. However, when I try to build a package with all my > functions I don?t reach this end, because of an error in parse process. > > > > My question > for you is the following: taking into account that my end is to build a > package, what can I do with this ?global? list?. How can I treat it?.Hi Eva, I was actually doing something similar just the other day -- for a "quick and dirty" solution, you can use assignInNamespace() or assignInMyNamespace() but the help pages suggest CRAN won't look kindly thereupon. To avoid that, I simply used a hidden [starting with a dot] variable in the user's global environment (i.e., I defined it on package load with the .onAttach() function and then just referenced it when needed) but the best practices solution is probably to use options() or something similar. See, e.g., setCompilerOptions() of the compiler package or setRmetricsOptions() of the Rmetrics bundle. Best, Michael> > > > Thanks in > advance. > > > > Regards, > > Eva > > > > > [[alternative HTML version deleted]] > > > ______________________________________________ > 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. >
Probably the best thing to do is create an environment within the package that you can assign to and read from. Somewhere in the source code for the package include a line like: my.env <- new.env() then within any functions defined after that line you can set variables within the environment with code like: my.env$paramA <- 3 and other functions can then read my.env$paramA. This way you don't need to worry about assign or <<- and all your functions will have access to the same set of variables (but they won't interfere with the users workspace). On Tue, Aug 7, 2012 at 1:09 AM, Eva Prieto Castro <evapcastro at yahoo.es> wrote:> > > Hi, > > > > My name is > Eva and this is my first message here. My English is not very good, but I hope > you can understand my question, in the context of an academic project. > > > > I have > developed several functions in R and the > idea is that the user can access functions in order to: > > > > 1) > Alter > parameters in relation with data and type of analysis. > > 2) > Run > statistical analysis (Text and pdf files with results will be generated). > > 3) > View > the value of the most important parameters. > > > > All the > parameters I need are stored in a list object, and this list is used in all the > functions along the cycle performed by the user, but I would like the user does > not need to pass the name of the list as argument when he/she runs the different > functions, so I think I need to treat the list as a global variable. > > > > Firstly, I > used the global assignment operator (?<<-?); secondly, I used ?get? and ?assign? > functions and even I used a new.env() in order to use a new environment > exclusively for my list. However, when I try to build a package with all my > functions I don?t reach this end, because of an error in parse process. > > > > My question > for you is the following: taking into account that my end is to build a > package, what can I do with this ?global? list?. How can I treat it?. > > > > Thanks in > advance. > > > > Regards, > > Eva > > > > > [[alternative HTML version deleted]] > > > ______________________________________________ > 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. >-- Gregory (Greg) L. Snow Ph.D. 538280 at gmail.com