Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 为什么which和Sys.which返回不同的路径?_R_Macos_Rstudio - Fatal编程技术网

R 为什么which和Sys.which返回不同的路径?

R 为什么which和Sys.which返回不同的路径?,r,macos,rstudio,R,Macos,Rstudio,我尝试使用以下命令从R运行Python脚本: system('python script.py arg1 arg2') 并得到一个错误: ImportError:没有名为pandas的模块 这有点令人惊讶,因为脚本在终端上按预期工作。以前遇到过此类问题(使用knitr,从那里选择chunk选项),我知道要检查: Sys.which('python') # python # "/usr/bin/python" 并将其与命令行进行比较: $ which python #

我尝试使用以下命令从R运行Python脚本:

system('python script.py arg1 arg2')
并得到一个错误:

ImportError:没有名为pandas的模块

这有点令人惊讶,因为脚本在终端上按预期工作。以前遇到过此类问题(使用
knitr
,从那里选择chunk选项),我知道要检查:

Sys.which('python')
#            python 
# "/usr/bin/python"
并将其与命令行进行比较:

$ which python
# /Users/michael.chirico/anaconda2/bin/python
(即,出现错误是因为我为anaconda发行版安装了
pandas
,但我不知道为什么我有不同的发行版)

因此,我可以通过运行以下命令来解决问题:

system('/Users/michael.chirico/anaconda2/bin/python script.py arg1 arg2')
我的问题有两个方面:

  • R的
    系统
    /
    Sys.哪个
    找到了与我的终端不同的
    python
  • 除了每次写出完整的二进制路径外,我还可以如何解决这个问题
我阅读了Sys.which以获得一些提示,但没有效果。特别是,
?Sys.which
建议
Sys.which
正在使用
which

这是系统命令
的接口,该命令

这显然是不真实的;可以肯定的是,我检查了
Sys.which('which')
which
,以确认两者都指向
/usr/bin/which
(这则花絮刺激):

在Unix上,安装R时可以找到的完整路径(通常是
/usr/bin/which


对于后者,我一时兴起尝试了
Sys.setenv(python='/Users/michael.chirico/anaconda2/bin/python')
,但没有成功

正如一些注释所提示的,这是一个问题,因为由Finder(或Dock)启动的程序的
PATH
环境变量与终端中的不同。有一些方法可以为Dock启动的应用程序设置
路径
,但它们并不漂亮。如果您想走这条路线,可以从这里开始寻找:

您可以做的另一件事(可能更简单)是告诉R在启动时设置
PATH
变量,使用
Sys.setenv
将路径添加到所需的Python实例中。通过将命令放置在相应位置的
.Rprofile
文件中,您可以对一个项目、整个用户帐户或整个系统执行此操作。有关如何执行此操作的更多信息,请参见此处:


期待答案,上周我有一个bash脚本,它从终端运行,但不是从R中的系统命令运行,但没有花时间调试或作为问题编写。(这是一次性的,所以我只是懒洋洋地从终端运行它。)假设所有的whiche都遵循
$PATH
,那么
$PATH
一定是不同的-R中的
系统(“echo$PATH”)
和shell中的
echo$PATH
是什么?这与python找到的一致吗?
system(“which python”)
是否与
Sys.which(“python”)
相同?@Spacedman是一个很好的建议,而且您已经了解了一些事情,事实上,我的
anaconda2/bin
目录位于我的终端的
$PATH
上,但不在R中
system
已知的路径上。鉴于此,我想
系统('which python')也就不足为奇了
Sys.which('python')
(从
system
找到的
python
没有附加
pandas
这一事实可以基本清楚地看出这一点),所以问题是:是否有一种非黑客方式来同步设置
路径
?很明显,我可以将在终端中找到的内容复制粘贴到
Sys.setenv(PATH=…)
那么如何启动RStudio呢?从菜单上?在这种情况下,它从启动桌面的进程获取路径。是否从终端命令行启动RStudio?这应该可以得到终端的路径……我希望有一种方法可以从finder启动的R实例中启动标准终端。如果有一种简单的设计方法,我很乐意添加一个
Sys.setenv(PATH=foo())
,上面说的
foo
链接问题中的主要答案对我不起作用,但这个答案确实起了作用: