Executando script R via shell script. erro de sintaxe próximo ao token inesperado `('

Executando script R via shell script. erro de sintaxe próximo ao token inesperado `('

Atualmente, estou tentando executar um script R por meio de um script de shell.

Aqui o script R:

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

E aqui o script bash que chama o R:

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

Acho que fiz tudo corretamente, mas a saída retorna o seguinte erro:

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

Por que recebi esse erro?

Responder1

O problema é que o shell está tentando executar o seu ${HOME}/test.Rcom um bashintérprete para o qual não está tentando entender a sintaxe da linha número 3. Use Rexplicitamente o intérprete a partir do qual você deseja test.Rexecutar.

Defina o intérprete para o seu Rscriptin test.Rcomo

#!/usr/bin/env Rscript

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

Dessa forma, com o interpretador definido, agora você pode executá-lo a partir do shell script como

Rscript ${HOME}/test.R

Lembre-se, fazer login no Rshell e executar os comandos nele, e experimentá-lo no shell script não são a mesma coisa, Ro shell é diferente do bashshell. Você precisa usar a maneira de executar os comandos sem fazer login Rdiretamente na linha de comando e usar a mesma abordagem no script de shell.

Responder2

Enfrentei o mesmo problema ao executar o script no contêiner do Ubuntu, depois de substituir \r\n por \n ele funciona. Abra o script usando um editor de texto e substitua todos os \r\n por \n

informação relacionada