17

可能重复的问题,但我不知道 RStudio 的启动过程来判断问题是否相同。我在 Linux 上使用 RStudio Desktop v0.99.442。从 RStudio 内的控制台,我运行

system("echo $PATH")
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

但是,我的真实$PATH(我echo $PATH从控制台看到的)上面有很多其他程序,我希望能够使用 R 中的 system() 调用它们。例如,在我的 .bashrc 中,我有 tabix附加到$PATH.

奇怪的是,当我从控制台中的 R 会话运行相同的命令时,我得到

system("echo $PATH")
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games;/path/to/bcftools-1.2/htslib-1.2.1/tabix

哪个是对的。因此,RStudio 中的 R 会话和控制台中的 R 会话是有区别的。它们不加载相同的环境变量。如何让 RStudio 使用正确版本的 $PATH?

4

3 回答 3

19

当您从命令行启动 R 然后运行system(echo $PATH)时,您将从命令行会话继承 Bash 环境。当您从 Mac 上的 Dock 或 Finder 或 Ubuntu 中的系统应用程序而不是从命令行启动 RStudio 时,RStudio 不会从您的/.bashrc. 相反,它将从系统范围的设置中获取环境变量。它如何找到这些系统设置将取决于操作系统。

Ubuntu

请参阅Ubuntu中环境变量的说明,尤其是有关桌面应用程序的部分

根据那个解释:

您可以通过编辑应用程序的 .desktop 文件将环境变量添加到应用程序。例如,要使用环境变量 APPMENU_DISPLAY_BOTH=1 运行“digiKam”,找到相应的 digikam.desktop 文件并通过 env 命令将变量的设置添加到条目“Exec”:

RStudio.desktop文件将位于~/.local/share/applications//usr/share/applications/(很可能是后者)中。编辑该文件以包含此行:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games;/path/to/bcftools-1.2/htslib-1.2.1/tabix

苹果电脑

系统范围的环境变量由 Launch Agent 而不是 Bash 设置。究竟如何为从 Finder 启动的应用程序设置环境变量将取决于您的 Mac OS X 版本。这个答案可能会有所帮助

我这样做的方法是添加一个文件,~/Library/LaunchAgents/com.username.envvariables.plist其中包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>Label</key>
    <string>com.username.envvariables</string>
    <key>ProgramArguments</key>
    <array>
      <string>sh</string>
      <string>-c</string>
      <string>
        launchctl setenv PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games;/path/to/bcftools-1.2/htslib-1.2.1/tabix
      </string>
    </array>
    <key>RunAtLoad</key>
    <true/>
  </dict>
</plist>

然后,您必须加载该文件:

launchctl load ~/Library/LaunchAgents/com.username.envvariables.plist

您可能需要重新启动 Finder:

killall -KILL Dock

然后重新启动 RStudio。

于 2015-06-29T17:28:13.737 回答
4

我遇到了同样的问题。而不是林肯的回答,我在 RStudio 控制台中手动设置了正确的环境

Sys.setenv(PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games;/path/to/bcftools-1.2/htslib-1.2.1/tabix")

在这种情况下。

R 正在使用的 PATH 也可以通过以下方式在控制台中检查

Sys.getenv()
于 2018-09-11T04:44:23.213 回答
1

我通过将 PATH 添加到 ~/.Renviron 解决了这个问题(在 MAC 上)你可以运行这个:

$ touch ~/.Renviron | R_PATH="PATH=$PATH" | echo $R_PATH >  ~/.Renviron

并重新启动 Rstudio。现在你应该在这两种情况下都有相同的 $PATH 。

于 2016-03-03T13:29:55.093 回答