R中system()函数无法识别PATH变量,调用conda命令失败求助
解决R中调用Shell命令无法识别conda的问题
我太懂你这困扰了——终端里conda用得顺风顺水,一到R的system()函数里就找不到命令,这其实是Shell环境加载逻辑搞的鬼,我来给你拆解原因和解决办法:
问题根源
当你在终端直接敲命令时,启动的是交互式登录Shell,它会自动加载~/.bashrc(或~/.bash_profile)这类配置文件,所以你添加的conda路径已经生效了。但R的system()函数默认调用的是非登录、非交互式Shell,这类Shell不会主动加载~/.bashrc,所以PATH里自然没有conda的位置。
解决方案(按推荐程度排序)
直接使用conda绝对路径调用
最简单的办法就是绕开PATH,直接指定conda的完整路径:system("~/anaconda2/bin/conda help")这种方式不需要修改任何环境配置,立即可用。
在R中临时设置PATH
如果后续还要多次调用conda,可以先在R里把conda路径加到环境变量中,之后的system()调用就能识别conda了:# 将conda路径添加到当前R会话的PATH中 Sys.setenv(PATH = paste("~/anaconda2/bin", Sys.getenv("PATH"), sep = ":")) # 现在可以正常调用conda了 system("conda help")让R调用的Shell加载bash配置
强制让bash以登录模式运行,这样它会加载~/.bashrc或~/.bash_profile里的配置,从而获得正确的PATH:system("bash -l -c 'conda help'")这里的
-l参数表示启动登录Shell,-c后面跟着要执行的命令。永久在R中配置PATH
如果你希望每次启动R都自动包含conda路径,可以修改R的启动文件~/.Rprofile,在里面添加一行代码:Sys.setenv(PATH = paste("~/anaconda2/bin", Sys.getenv("PATH"), sep = ":"))保存文件后重启R,之后所有的
system()调用都会自动带上conda的PATH了。
内容的提问来源于stack exchange,提问作者Szymon Maksymiuk
相关产品推荐
相关产品推荐

