Hi there,
I am trying to distinguish between getOption() and Sys.getenv(). My
understanding is that these are both used to set values for variables.
getOption is set something like this: option("var" = "A").
This can be
placed in an .Rprofile or at the top of script. They are called like this
getOption("var").
Environmental variables are set in the .Renviron file like this: "var"
"A" and called like this: Sys.getenv("var"). I've seen
mention in the httr
package documentation that credentials for APIs should be stored in this
way.
So my question is how does one decide which path is most appropriate? For
example I am working on a package that has to query a database in almost
every function call. I want to provide users an ability to skip having to
specify that path in every function call. So in this case should I
recommend users store the path as an option or as an environmental
variable? If I am storing credentials in an .Renviron file then maybe I
should store the path there as well?
More generally the question is can anyone recommend some good
discussion/documentation on this topic?
Thanks in advance,
Sam
[[alternative HTML version deleted]]
On 25/08/2017 1:19 PM, Sam Albers wrote:> Hi there, > > I am trying to distinguish between getOption() and Sys.getenv(). My > understanding is that these are both used to set values for variables. > getOption is set something like this: option("var" = "A"). This can be > placed in an .Rprofile or at the top of script. They are called like this > getOption("var"). > > Environmental variables are set in the .Renviron file like this: "var" > "A" and called like this: Sys.getenv("var"). I've seen mention in the httr > package documentation that credentials for APIs should be stored in this > way. > > So my question is how does one decide which path is most appropriate? For > example I am working on a package that has to query a database in almost > every function call. I want to provide users an ability to skip having to > specify that path in every function call. So in this case should I > recommend users store the path as an option or as an environmental > variable? If I am storing credentials in an .Renviron file then maybe I > should store the path there as well? > > More generally the question is can anyone recommend some good > discussion/documentation on this topic?The environment is set outside of R; it's really part of the operating system that runs R. So use Sys.getenv() if you want the user to be able to set something before starting R. Use Sys.setenv() only if your R program is going to use system() (or related function) to run another process, and you want to communicate with it. The options live entirely within a given session. The .Renviron and .Rprofile files hide this difference, but they aren't the only ways to set these things, they're just convenient ways to set them at the start of a session. Duncan Murdoch
There's also the alternative to use both, e.g. by having a system
environment variable set a corresponding R option, which then can be
overridden using options(). For instance, the R option mc.cores,
which is used by the parallel package, is set to the (integer) value
of system environment variable MC_CORES, iff set. Conceptually, when
the parallel package is loaded, the following takes place:
if (is.null(getOption("mc.cores")) {
cores <- as.integer(Sys.getenv("MC_CORES"))
if (!is.na(cores)) options(mc.cores = cores)
}
Example:
$ Rscript -e "library(parallel); getOption('mc.cores')"
NULL
$ MC_CORES=2 Rscript -e "library(parallel);
getOption('mc.cores')"
[1] 2
$ MC_CORES=2 Rscript -e "options(mc.cores = 4); library(parallel);
getOption('mc.cores')"
[1] 4
/Henrik
On Fri, Aug 25, 2017 at 10:33 AM, Duncan Murdoch
<murdoch.duncan at gmail.com> wrote:> On 25/08/2017 1:19 PM, Sam Albers wrote:
>>
>> Hi there,
>>
>> I am trying to distinguish between getOption() and Sys.getenv(). My
>> understanding is that these are both used to set values for variables.
>> getOption is set something like this: option("var" =
"A"). This can be
>> placed in an .Rprofile or at the top of script. They are called like
this
>> getOption("var").
>>
>> Environmental variables are set in the .Renviron file like this:
"var" >> "A" and called like this:
Sys.getenv("var"). I've seen mention in the httr
>> package documentation that credentials for APIs should be stored in
this
>> way.
>>
>> So my question is how does one decide which path is most appropriate?
For
>> example I am working on a package that has to query a database in
almost
>> every function call. I want to provide users an ability to skip having
to
>> specify that path in every function call. So in this case should I
>> recommend users store the path as an option or as an environmental
>> variable? If I am storing credentials in an .Renviron file then maybe I
>> should store the path there as well?
>>
>> More generally the question is can anyone recommend some good
>> discussion/documentation on this topic?
>
>
>
> The environment is set outside of R; it's really part of the operating
> system that runs R. So use Sys.getenv() if you want the user to be able to
> set something before starting R. Use Sys.setenv() only if your R program
is
> going to use system() (or related function) to run another process, and you
> want to communicate with it.
>
> The options live entirely within a given session.
>
> The .Renviron and .Rprofile files hide this difference, but they aren't
the
> only ways to set these things, they're just convenient ways to set them
at
> the start of a session.
>
> Duncan Murdoch
>
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
Reasonably Related Threads
- getOption() versus Sys.getenv
- R CMD check --as-cran attempts to hide R_LIBS_USER but fails
- Sys.getenv(): Error in substring(x, m + 1L) : invalid multibyte string at '<ff>' if an environment variable contains \xFF
- R CMD check --as-cran attempts to hide R_LIBS_USER but fails
- Confused with default device setup