Running R script via shell script. syntax error near unexpected token `('

8,277

The problem is the shell is trying to the run your ${HOME}/test.R with a bash interpreter for which it is not trying to understand the syntax from the line number 3. Use the R interpreter explicitly from which you want the test.R to run from.

Set the interpreter for your Rscript in test.R as

#!/usr/bin/env Rscript

module purge
module load R 
test = rnorm(1:100, 1000)
write.csv(test, 'test.csv')

This way with the interpreter set, you can now run it from the shell script as

Rscript ${HOME}/test.R

Remember, logging into R shell and running the commands on it, and trying it out in the shell script are not the same, R shell is different from the bash shell. You need to use the way to run the commands without logging into R from the command line directly and use that same approach in the shell script.

Share:
8,277

Related videos on Youtube

aaaaa
Author by

aaaaa

Updated on September 18, 2022

Comments

  • aaaaa
    aaaaa over 1 year

    I am currently trying to run an R script via a shell script.

    Here the R script:

    test = rnorm(1:100, 1000)
    write.csv(test, 'test.csv')
    

    And here the bash script which calls the R one:

    #!/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
    

    I think I did everything correctly, but the output returns the following error:

    /mydirectory/test.R: line 3: syntax error near unexpected token `('
    /mydirectory/test.R: line 3: `test = rnorm(1:100, 1000)'
    

    Why I did I get this error?

    • Hauke Laging
      Hauke Laging over 6 years
      What is the output of ls -l ${HOME}/test.R?
    • aaaaa
      aaaaa over 6 years
      p.s. if I run test.R without the shell script it works fine.
    • Inian
      Inian over 6 years
      @aaaaa: Can you show the complete command, on how you tested the R script to be working?
    • aaaaa
      aaaaa over 6 years
      it is a 2 lines R script just to see if the shell script works. I just ran it by logging into R and using 'source('test.R')' and it works.
    • Inian
      Inian over 6 years
      @aaaaa: Remember, logging into R and running the commands, and trying it out in the shell script is not the same, R shell is different from the bash shell. Figure out a way to run the commands without logging into R from the command line directly and use that same approach in the shell script
    • aaaaa
      aaaaa over 6 years
      yes, just realised that...let's see...
    • aaaaa
      aaaaa over 6 years
      right..the command is Rscript and it works!
  • yieldsfalsehood
    yieldsfalsehood over 6 years
    I'm quite sure the module entries are actually bash functions: modules.sourceforge.net
  • Ferrybig
    Ferrybig over 6 years
    After adding the shebang, you can just call the script as ${HOME}/test.R, you don't need to prepend it with the interpreter anymore