【问题标题】:Accessing R's Environmental Variables from Bash从 Bash 访问 R 的环境变量
【发布时间】:2015-01-21 09:46:46
【问题描述】:

我正在尝试从 bash 访问 R 的 environmental variables。安装指南最初让我相信 $R_HOME 是在 bash 中声明的。然而,这似乎并不准确。

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

之前的问题已经询问了如何在 R 中使用 Sys.getenv() 或 Sys.setenv() 访问这些变量。这个问题的重点是能够通过 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

我真的更愿意找到一种方法,让我无需经历这个过程就可以访问所有环境变量。

一些环境变量的定义在R_HOME/etc/Renviron 中列出。但是,它们在 bash 中都不可用。

【问题讨论】:

    标签: r bash


    【解决方案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:~$ 
    

    【讨论】:

      【解决方案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 脚本获取输出。

      【讨论】:

        【解决方案3】:

        不,这些变量在 bash 中都不可用 - 除非您自己设置它们。

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

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

        请注意,您可以运行两个脚本,它们将具有不同的Renviron 文件,从而具有不同的环境变量。我不确定您要做什么,但值得记住的是,给定变量可能没有一个真值。

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

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

        【讨论】:

          猜你喜欢
          • 2012-06-15
          • 1970-01-01
          • 2022-01-04
          • 1970-01-01
          • 1970-01-01
          • 2010-11-21
          • 2016-01-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多