通过 shell 脚本运行 R 脚本。意外标记“(”附近出现语法错误

通过 shell 脚本运行 R 脚本。意外标记“(”附近出现语法错误

我目前正在尝试通过 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

请记住,登录Rshell 并在其上运行命令与在 shell 脚本中尝试是不一样的,Rshell 与 shell 不同bash。您需要使用无需直接从命令行登录的方式来运行命令R,并在 shell 脚本中使用相同的方法。

答案2

我在 Ubuntu 容器上运行脚本时遇到了同样的问题,将 \r\n 替换为 \n 后它就可以工作了。使用文本编辑器打开脚本并将所有 \r\n 替换为 \n

相关内容