可能duplicate的问题,但我不知道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。例如,在我的.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?
答案 0 :(得分:15)
从命令行启动R然后运行system(echo $PATH)
时,您将从命令行会话继承Bash环境。当您从Mac上的Dock或Finder或Ubuntu中的系统应用程序启动RStudio而不是从命令行启动时,RStudio不会从您的/.bashrc
获取其环境。相反,它将从系统范围的设置中获取环境变量。如何找到这些系统设置将取决于操作系统。
请参阅Ubuntu中的this explanation of environment variables,尤其是section on desktop applications。
根据这个解释:
您可以通过编辑其.desktop文件将环境变量添加到应用程序。例如,运行" digiKam"使用环境变量APPMENU_DISPLAY_BOTH = 1,找到相应的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版本。answer might help。
我这样做的方法是添加一个包含以下内容的文件~/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。
答案 1 :(得分:1)
我遇到了同样的问题。代替林肯的答案,我在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正在使用的路径也可以在控制台中通过以下方式检查
Sys.getenv()
答案 2 :(得分:0)
我通过向〜/ .Renviron添加PATH解决了这个问题(在MAC上) 你可以运行:
$ touch ~/.Renviron | R_PATH="PATH=$PATH" | echo $R_PATH > ~/.Renviron
并重新启动Rstudio。现在你应该在两种情况下都有相同的$ PATH。