現在、シェルスクリプトを介して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に置き換えます。