【问题标题】:Where should I set the variable PATH in R?我应该在哪里设置 R 中的变量 PATH?
【发布时间】:2017-10-08 12:02:54
【问题描述】:

我经常需要在 R 中调用 Tex Live 二进制文件进行编译。但是在升级 Tex Live 发行版之后,需要在 PATH(Sys.getenv("PATH")) 变量中手动更新当前二进制文件的路径。

作为 Ubuntu 系统上的单个用户,我应该更新哪个文件中的值,以便 R 正确获取 PATH,而不管 R 从哪个目录启动。

我仍然没有收集到的一点是R 从哪里获得其站点范围内的(我的意思是所有用户,即使这样说有误)PATH 变量集,因为没有像“ PATH”是否出现在“R_HOME/etc/”和用户主目录中的任何文件(Renviron、Renviron.site、Rprofile.site)中?我也没有设置Sys.getenv("R_ENVIRON")Sys.getenv("R_ENVIRON_USER") 值。

感谢任何人的意见。

【问题讨论】:

  • PATH 变量可以为你的整个 Ubuntu 系统设置,它实际上更像是一个 Ubuntu 的东西,而不是 R 特有的东西,因此它没有出现在像 Renviron 这样的文件中。见askubuntu.com/questions/60218/…
  • PS:我会推荐建议编辑~/.profile而不是其他建议的答案。
  • 问题是有时 bash 环境变量不与 R 共享。我从 .Rprofile 设置了我的 PATH 变量。
  • @neilfws 感谢您的建议。但是,对于 rstudio 会话,在桌面环境中运行,默认情况下,~/.profile 中定义的变量似乎是不共享的。
  • 我不这么认为。我在 Ubuntu 服务器上有一个 .profile 包含行 PATH="$HOME/bin:$PATH" ,当我在该服务器上的 RStudio 桌面上运行 Sys.getenv() 时,我看到该目录附加到 PATH 。也许您需要在编辑后source ~/.profile 或尝试重新登录?

标签: r environment-variables


【解决方案1】:

@JeffreyGoldberg 的解决方案很接近,但并不完全正确。

Rprofile 文件被解释为 R 代码 Renviron 文件只能包含名称值对,并且解释为 R 代码

来自启动帮助:

请注意,启动时使用了两种文件:包含要设置的环境变量列表的环境文件和包含 R 代码的配置文件。

我不确定这个问题是否具体询问如何为一个特定用户设置 站点范围PATH,而不是 PATH,但您可以在三个位置可以放这些文件。

  1. 项目目录(即,您选择从中启动 R 的目录)
  2. HOME
  3. R_HOME/etc

按照上面编号的顺序搜索这些位置。第一个位置可以包含特定于项目的配置,第二个位置包含特定于用户的配置,第三个位置可以包含站点范围的配置设置。当找到一个文件时,它会被使用,因此本地优先于全局。不要认为您可以创建一个更具体的版本来简单地更新您在更通用的配置文件中所做的事情。 R_HOME/etc/Renviron 是在安装时创建的,不应编辑。您可以创建一个名为R_HOME/etc/Renviron.site 的文件,但不要编辑R_HOME/etc/Renviron

要创建站点范围的 PATH 值,您需要将其设置在 R_HOME/etc 的文件中。在这里,您可以使用Renviron.siteRprofile.site 作为文件名。对于R_HOME/etc 中的文件,请勿使用RenvironRprofile.Renviron.Rprofile 作为此位置的配置文件或环境文件的名称。您可以使用 R.home()Sys.getenv("R_HOME") 找出 R 会话中的 R_HOME 是什么

要为单个用户创建 PATH 值,请将其设置在 HOME 中的文件中,您可以使用 Sys.getenv("HOME")path.expand("~") 在 R 会话中找到该值。您也可以只使用“~”来指代HOME。在这里,Renviron 文件应该是 ~/.Renviron 和 Rprofile 文件 ~/.Rprofile。注意HOME 目录与R_HOME/etc 目录中配置文件和环境文件的命名方式之间的区别

要为单个项目创建 PATH,请将其设置在该项目顶级目录中的文件中。像在主目录中一样命名文件(.Rprofile.Renviron)。

如果您正在创建 Renviron 文件,该文件应包含以下行:

PATH=<your path>

&lt;&gt; 不应包含在内。一个例子是:

PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

如果您正在创建 Rprofile 文件,该文件应包含以下行:

Sys.setenv("<your path>")

再次强调,不要包含“”。一个例子是:

Sys.setenv("/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin")

有多种方法可以获取和编辑 PATH 变量(例如,在末尾或开头添加新路径)。如果环境变量不存在和/或不包含您想要的内容,您也可以使用设置环境变量的策略。我开始更喜欢简单地设置我的路径,然后直接编码。

最后一点,如果您从命令行界面运行R,环境变量可能会从您的shell 继承。 RStudio 也有它自己的启动顺序,并且可能会修改 PATH 变量的结尾。它应该按照您在 Rprofile 或 Renviron 文件中定义的方式启动。 R 控制台应用程序本身具有最少的系统环境变量怪癖,并且应该完全按照使用 Rprofile 或 Renviron 文件设置的路径接受您的路径。

【讨论】:

    【解决方案2】:

    编辑:我应该在发布之前进行测试。我在下面描述的 没有 工作。 (否决我自己的答案是一件奇怪的事情。)

    在我的系统(macOS、bash)上,R.app 没有从我的 shell 环境中获取我的 $PATH.profile。然而,RStudio 正在接受它。我不明白不同的行为。

    获得一致行为的一种方法是在 Renviron 文件中指定这一点。

    如果您在 come 目录中创建一个名为 .Renviron 的文件,其中包含如下行

    Sys.setenv(PATH="/opt/local/bin:usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Library/TeX/texbin")

    (当然还有你需要的路径元素)应该给你一致的行为。

    缺点是您需要手动维护它。我想您可以从生成.Renviron 文件的其他启动脚本之一运行脚本。但无论哪种方式,我认为整个事情都是一种解决方法,而不是真正了解 R 从哪里获取环境。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-07
      • 2022-01-15
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 2014-06-27
      • 2023-04-05
      相关资源
      最近更新 更多