我目前正在尝试通过 shell 脚本运行 R 脚本。
这是 R 脚本:
test = rnorm(1:100, 1000)
write.csv(test, 'test.csv')
这里是调用 R 的 bash 脚本:
#!/bin/bash -l
#SBATCH --partition=compute
#SBATCH --job-name=test
#SBATCH --mail-type=ALL
#SBATCH [email protected]
#SBATCH --time=00:10:00
#SBATCH --nodes=1
#SBATCH --tasks-per-node=12
#SBATCH --account=myaccount
module purge
module load R
${HOME}/test.R
我认为我所做的一切都是正确的,但输出返回以下错误:
/mydirectory/test.R: line 3: syntax error near unexpected token `('
/mydirectory/test.R: line 3: `test = rnorm(1:100, 1000)'
为什么我会收到此错误?
答案1
问题是 shell 正在尝试使用${HOME}/test.R
解释器运行您的程序bash
,但它并不尝试理解第 3 行中的语法。R
明确使用您想要test.R
运行的解释器。
将您的解释器Rscript
设置test.R
为
#!/usr/bin/env Rscript
module purge
module load R
test = rnorm(1:100, 1000)
write.csv(test, 'test.csv')
这样,通过解释器集,您现在可以从 shell 脚本运行它:
Rscript ${HOME}/test.R
请记住,登录R
shell 并在其上运行命令与在 shell 脚本中尝试是不一样的,R
shell 与 shell 不同bash
。您需要使用无需直接从命令行登录的方式来运行命令R
,并在 shell 脚本中使用相同的方法。
答案2
我在 Ubuntu 容器上运行脚本时遇到了同样的问题,将 \r\n 替换为 \n 后它就可以工作了。使用文本编辑器打开脚本并将所有 \r\n 替换为 \n