在Unix群集上运行R脚本作为批处理作业时遇到问题。问题是当尝试在环境中加载库时,R无法找到库。我给你举个例子。我将使用基本的R脚本名称sess.R:
print(.libPaths())
library("gtools")
print(sessionInfo())
如果我只是使用以下命令从命令行运行此脚本:
$ Rscript sess.R
我得到以下输出:
[1] "/usr/lib64/R/library" "/usr/share/R/library"
R version 3.2.3 (2015-12-10)
Platform: x86_64-redhat-linux-gnu (64-bit)
Running under: CentOS release 6.6 (Final)
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets base
other attached packages:
[1] gtools_3.5.0
图书馆" gtools"正确加载,脚本正在运行。但是,如果我编写一个简单的批处理作业(我将在作业中包含几个可选参数,包括错误和输出文件),如:
#!/bin/bash
#SBATCH --output=sess.out
#SBATCH --error=sess.err
Rscript sess.R
一秒钟后作业失败了。我得到的两个输出文件当然是sess.out和sess.err。 Sess.out包含库目录:
[1] "/usr/lib64/R/library" "/usr/share/R/library"
这似乎与从命令行运行Rscript时相同,所以没有错误。但是,由于脚本已终止,因此无法打印信息会话。 sess.err文件包含以下错误:
Error in library("gtools") : there is no package called ‘gtools’
Execution halted
在那里,似乎R在这种情况下无法找到gtools,即使库路径是相同的...... 我错过了什么吗?有没有错误,我什么都看不到?或者是集群设置的问题?