从Bash访问R的环境变量

时间:2015-01-20 11:18:21

标签: r bash

我试图从bash访问R {'{3}}。安装指南最初让我相信$ R_HOME是在bash中声明的。但是,这似乎并不准确。

有没有办法从bash访问这些环境变量?

之前的问题已经询问如何使用Sys.getenv()或Sys.setenv()从R中访问这些变量。这个问题的重点是能够通过bash访问信息。简单地调用echo $R_HOME不会在bash变量中产生适当的路径。

例如,我可以使用复杂的方法获取信息:

R_HOME=$(Rscript -e "Sys.getenv('R_HOME')" | grep -Po '".*?"' | sed 's/"//g')

所以我会收到: [1]" / usr / lib64 / R"

Grep然后给出: "在/ usr / lib64下/ R"

最后sed: 的/ usr / lib64下/ R

我真的更喜欢用一种方法让我访问所有环境变量,而不必经历这个过程。

environmental variables中列出了一些环境变量的定义。但是,bash中没有一个可用。

3 个答案:

答案 0 :(得分:2)

如果未在bash中设置,但您需要使用它,为什么不这样做:

R_HOME=`Rscript --silent -e 'writeLines(Sys.getenv("R_HOME"))'`
echo $R_HOME
/Library/Frameworks/R.framework/Resources

(显然,我在OS X上)

您可以这样获得所有R_变量:

Rscript -e 'for (x in grep("^R_", names(Sys.getenv()), value=TRUE)) writeLines(sprintf("%s=%s", x, Sys.getenv(x)))'

然后获取bash脚本的输出。

答案 1 :(得分:1)

不,这些变量都不会在bash中提供 - 除非你自己设置它们。

您可能对?Startup感兴趣,这解释了R如何设置环境变量的过程:

  

除非在命令行上给出了--no-environ,否则R搜索要处理的站点和用户文件以设置环境变量。站点文件的名称是环境变量R_ENVIRON指向的名称;如果未设置,则使用“R_HOME / etc / Renviron.site”(如果存在,则不在'factory-fresh'安装中)。用户文件的名称可以由R_ENVIRON_USER环境变量指定;如果未设置,则在当前或用户的主目录中(按此顺序)搜索的文件为“.Renviron”。

请注意,您可以运行两个脚本,这些脚本具有不同的Renviron文件,因此具有不同的环境变量。我不确定你要做什么,但值得注意的是,给定变量可能没有一个真正的价值。

那就是说,你可以读取默认的Renviron并自己设置所有变量:

$ R_HOME=`R RHOME`
$ source $R_HOME/etc/Renviron
$ echo $R_PAPERSIZE
a4

答案 2 :(得分:1)

这可能比之前的两个答案更容易提出:

由于RHOME非常重要,请R RHOME

edd@don:~$ R RHOME
/usr/lib/R
edd@don:~$ val=$(R RHOME)
edd@don:~$ echo ${val}
/usr/lib/R
edd@don:~$ 

基本上所有其他人都可以通过R CMD config ...

获取
edd@don:~$ R CMD config --help | head -20
Usage: R CMD config [options] [VAR]

Get the value of a basic R configure variable VAR which must be among
those listed in the 'Variables' section below, or the header and
library flags necessary for linking against R.

Options:
  -h, --help            print short help message and exit
  -v, --version         print version info and exit
      --cppflags        print pre-processor flags required to compile
            a C/C++ file using R as a library
      --ldflags         print linker flags needed for linking a front-end
                        against the R library
      --no-user-files  ignore customization files under ~/.R
      --no-site-files  ignore site customization files under R_HOME/etc

Variables:
  BLAS_LIBS     flags needed for linking against external BLAS libraries
  CC            C compiler command
  CFLAGS        C compiler flags
edd@don:~$ 

最后,对于运行R会话,您可以启动并访问它:

edd@don:~$ Rscript -e 'cat(Sys.getenv("PATH"))'     # manual break
/home/edd/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:\
/sbin:/bin:/usr/games:/usr/local/gamesedd@don:~$