有时候我们会在R中直接调用Linux软件命令实现在Shell下的操作,但R或RStudio与Shell本就是不同的,有时候进行调用时你会发现居然命令找不到的情况。
我举个例子,我在Shell调用Julia(安装后从没用过的一个语言/(ㄒoㄒ)/~~)的帮助命令。
$ julia --help
julia [switches] -- [programfile] [args...]
-v, --version Display version information
-h, --help Print this message
...
Okay,没问题,我们再到R里面试试。
> system("julia --help")
sh: 1: julia: not found
Warning message:
In system("julia --help") : error in running command
啊哈,找不到julia?!
这个问题的原因是Rstudio如果不是从Shell打开,他不会继承所有的Shell PATH变量,而会使用系统默认分配的PATH变量。
> Sys.getenv("PATH")
[1] "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
不像我Shell下的PATH变量/(ㄒoㄒ)/~~

好了,知道原因了就知道解决的方向。
最简单的办法是直接在脚本中将路径添加上,如
Sys.setenv(PATH=paste0("/home/wsx/julia-1.0.0/bin", Sys.getenv("PATH")))
也可以将其永久地写入配置~/.Renvrion
。
PATH=/home/wsx/julia-1.0.0/bin:${PATH}
重启RStudio。
> system("julia --help")
julia [switches] -- [programfile] [args...]
-v, --version Display version information
-h, --help Print this message
更多方案与解释
网友评论