シェルスクリプトを介してRスクリプトを実行します。予期しない表示'('の近くに構文エラーがあります.

シェルスクリプトを介してRスクリプトを実行します。予期しない表示'('の近くに構文エラーがあります.

現在、シェルスクリプトを介して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

問題は、シェルが${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')

これにより、インタプリタセットを使用してシェルスクリプトで実行できるようになります。

Rscript ${HOME}/test.R

シェルにログインRしてコマンドを実行することは、シェルスクリプトで試しているのと同じではありません。Rこれはシェルとは異なりますbash。コマンドラインから直接ログインする必要がないようにコマンドを実行し、Rシェルスクリプトでも同じ方法を使用する必要があります。

答え2

Ubuntuコンテナでスクリプトを実行するのに同じ問題があり、\ r \ nを\ nに置き換えた後はうまくいきました。テキストエディタでスクリプトを開き、すべての\ r \ nを\ nに置き換えます。

関連情報