シェル スクリプト経由で 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

問題は、シェルが3 行目の構文を理解しようとしないインタープリタ${HOME}/test.Rを使用してを実行しようとしていることです。 を実行するインタープリタを明示的に使用してください。bashRtest.R

の通訳者を次のように設定Rscripttest.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に置き換えてください。

関連情報