
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.R
com um bash
intérprete para o qual não está tentando entender a sintaxe da linha número 3. Use R
explicitamente o intérprete a partir do qual você deseja test.R
executar.
Defina o intérprete para o seu Rscript
in test.R
como
#!/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 R
shell e executar os comandos nele, e experimentá-lo no shell script não são a mesma coisa, R
o shell é diferente do bash
shell. Você precisa usar a maneira de executar os comandos sem fazer login R
diretamente 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